OleDbConnection.Close()不起作用



我有一个方法,在本地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;
}

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

这里有什么问题?

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

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

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

您可以省去遍历每一行的需要。

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

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

希望这能帮助

默认情况下,

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

尝试将con.close放入finally()

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
}

适用于我

相关内容

  • 没有找到相关文章

最新更新