OleDbConnection.Close()不起作用

时间:2012-09-11 07:24:59

标签: c# oledb oledbconnection

我有一种方法可以在本地MDB-Acces文件中插入一些数据。使用此代码可以正常工作:

try
{
   foreach (DataRow rowS99 in dtS99.Rows)
   {
      con.Open();
      da.InsertCommand = con.CreateCommand();
      da.InsertCommand.Parameters.AddWithValue("@wertListName", rowS99["WertListName"]);
      da.InsertCommand.Parameters.AddWithValue("@key", rowS99["Key"]);
      da.InsertCommand.Parameters.AddWithValue("@bezeichner", rowS99["Bezeichner"]);
      da.InsertCommand.Parameters.AddWithValue("@keyAufbereitet", rowS99["KeyAufbereitet"]);
      da.InsertCommand.CommandText = sql;
      da.InsertCommand.ExecuteNonQuery();
      con.Close();
   }
   check = true;
}

当我将打开和关闭方法放在foreach循环之外时,代码可以正常工作,但是用于连接的本地文件已经使用Visual Studio打开,因此我无法删除或移动它。连接状态在con.Close()关闭后显示。

这是什么问题?

4 个答案:

答案 0 :(得分:1)

您不需要在循环中打开和关闭连接。如果您的表中有500行,那么您将打开&关闭连接500次,这不是最好的做法..

您的连接应在循环前的Try语句中打开,并在处理完所有行后关闭。

我认为你最好使用Update()函数而不是你上面的方法。

您可以不必遍历每一行。

http://msdn.microsoft.com/en-us/library/system.data.common.dataadapter.update.aspx

使用此功能,您只需调用Update()方法即可添加,编辑和删除行。您将需要设置所有3个命令,UPDATE,INSERT,DELETE。

希望这有帮助

答案 1 :(得分:0)

默认情况下,

IDbConnection.Close方法只返回连接回连接池。它不会关闭物理连接(网络连接或文件)。您可以禁用连接池(但这会降低应用程序的工作效率),或清除连接池(请参阅OleDbConnection.ReleaseObjectPool)。

答案 2 :(得分:0)

尝试将con.close放入finally()

答案 3 :(得分:0)

try
{
 con.Open();
 foreach (DataRow rowS99 in dtS99.Rows)
 {
  da.InsertCommand = con.CreateCommand();
  da.InsertCommand.Parameters.AddWithValue("@wertListName", rowS99["WertListName"]);
  da.InsertCommand.Parameters.AddWithValue("@key", rowS99["Key"]);
  da.InsertCommand.Parameters.AddWithValue("@bezeichner", rowS99["Bezeichner"]);
  da.InsertCommand.Parameters.AddWithValue("@keyAufbereitet", rowS99["KeyAufbereitet"]);
  da.InsertCommand.CommandText = sql;
  da.InsertCommand.ExecuteNonQuery();
 }
 con.Close();
 check = true;
 OleDb.OleDbConnection.ReleaseObjectPool();
 GC.Collect();  // I know attation
}

为我工作