大马资讯论坛 - 马来西亚中文资讯平台

 找回密码
 注册
搜索

C# The OleDbParameter is already contained by another OleDbParameterCollection

[复制链接]
发表于 2012-12-22 14:37:27 | 显示全部楼层 |阅读模式
excel错误[教学-解决方案]
这问题是因为你没把Parameter清除,记得每次的execute command时,都需要放进新的parameter。
来看看下面的范例。
The sqlparameter is already contained by another sqlparametercollection c#
The OleDbParameter is already contained by another OleDbParameterCollection


我的Excel有Sheet 1和 Sheet 2,这两个sheet都有CarId 和 CarDesc Column
请试试看吧。
  1.         private string strConnString = "Provider=Microsoft.ACE.OLEDB.12.0" +
  2.             ";Data Source=" + Application.StartupPath + "\\Database.xls" +
  3.             ";Extended Properties=Excel 12.0;";
  4.         private OleDbConnection DbConn = new OleDbConnection();
  5.         private void createConn()
  6.         {
  7.             try
  8.             {
  9.                 DbConn.ConnectionString = strConnString;
  10.                 DbConn.Open();
  11.             }
  12.             catch (Exception exp)
  13.             {
  14.                 throw exp;
  15.             }
  16.         }

  17.         private void Add_Records(string sSQL, ArrayList parameters)
  18.         {
  19.             try
  20.             {
  21.                 if (DbConn.State == 0)
  22.                     createConn();

  23.                 using (OleDbCommand sqlCmd = new OleDbCommand("", DbConn))
  24.                 {
  25.                     sqlCmd.CommandText = sSQL;

  26.                     foreach (OleDbParameter param in parameters)
  27.                         sqlCmd.Parameters.Add(param);

  28.                     sqlCmd.ExecuteNonQuery();
  29.                 }
  30.             }
  31.             catch (Exception ex)
  32.             {
  33.                 MessageBox.Show(ex.ToString());
  34.             }
  35.             finally
  36.             {
  37.                 DbConn.Close();
  38.             }
  39.         }

  40.         private void btnSave_Click(object sender, EventArgs e)
  41.         {
  42.             try
  43.             {
  44.                 string sSqlSheet1 = "INSERT INTO [Sheet1$] ([CarID], [CarDesc]) values (@CarID, @CarDesc)";

  45.                 ArrayList parameters = new ArrayList();

  46.                 parameters.Add(new OleDbParameter("@CarID", "1"));
  47.                 parameters.Add(new OleDbParameter("@CarDesc", "BMW"));
  48.                 Add_Records(sSqlSheet1, parameters);

  49.                 string sSqlSheet2 = "INSERT INTO [Sheet2$] ([CarID], [CarDesc]) values (@CarID, @CarDesc)";

  50.                 parameters = new ArrayList();//如果我不重新new一次parameter,错误肯定被弹出来

  51.                 parameters.Add(new OleDbParameter("@CarID", "1"));
  52.                 parameters.Add(new OleDbParameter("@CarDesc", "BMW"));

  53.                 Add_Records(sSqlSheet2, parameters);
  54.             }
  55.             catch (Exception ex)
  56.             {
  57.                 MessageBox.Show(ex.ToString());
  58.             }
  59.         }
复制代码
如何使用OleDb可以浏览以下网址
微软官方网站:http://support.microsoft.com/kb/316934

手机版|大马资讯论坛  

GMT+8, 2022-5-25 05:00 , Processed in 0.035896 second(s), 12 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表