我有一种方法可以在本地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()
关闭后显示。
这是什么问题?
答案 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
}
为我工作