资讯王 发表于 2012-12-22 14:37:27

C# The OleDbParameter is already contained by another OleDbParameterCollection

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
请试试看吧。      private string strConnString = "Provider=Microsoft.ACE.OLEDB.12.0" +
            ";Data Source=" + Application.StartupPath + "\\Database.xls" +
            ";Extended Properties=Excel 12.0;";
      private OleDbConnection DbConn = new OleDbConnection();
      private void createConn()
      {
            try
            {
                DbConn.ConnectionString = strConnString;
                DbConn.Open();
            }
            catch (Exception exp)
            {
                throw exp;
            }
      }

      private void Add_Records(string sSQL, ArrayList parameters)
      {
            try
            {
                if (DbConn.State == 0)
                  createConn();

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

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

                  sqlCmd.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                DbConn.Close();
            }
      }

      private void btnSave_Click(object sender, EventArgs e)
      {
            try
            {
                string sSqlSheet1 = "INSERT INTO (, ) values (@CarID, @CarDesc)";

                ArrayList parameters = new ArrayList();

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

                string sSqlSheet2 = "INSERT INTO (, ) values (@CarID, @CarDesc)";

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

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

                Add_Records(sSqlSheet2, parameters);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
      }
如何使用OleDb可以浏览以下网址
微软官方网站:http://support.microsoft.com/kb/316934
页: [1]
查看完整版本: C# The OleDbParameter is already contained by another OleDbParameterCollection