我做了一个Winform程序,数据库用的Access,在窗体上使用了一个SaveFileDialog控件,正常情况下,SaveFileDialog能使用,但是只要执行了访问数据库的操作,再使用SaveFileDialog,当执行SaveFileDialog.ShowDialog()时就报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
考虑是数据库资源没有释放,但是我在代码里写了conn.Close();conn.Dispose();
是否是这样并未释放数据库资源?还是另外有其他的原因?
数据库连接代码:
private static OleDbConnection ConnAccess()
{
string strConn="Provider=Microsoft.ACE.OLEDB.12.0;jet oledb:database password=zkgsoft4321;Data Source=" +"D:\\Data.accdb"+ ";Persist Security Info=False";
OleDbConnection conn = new OleDbConnection(GetConnString());
return conn;
}
/// <summary>
/// 返回第一行第一列
/// </summary>
/// <returns></returns>
public static object ExecuteScalar(string strCmdText)
{
object strValue = null;
using (OleDbConnection conn = ConnAccess())
{
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = strCmdText;
try
{
conn.Open();
strValue = cmd.ExecuteScalar();
}
catch (Exception e)
{
throw e;
}
finally
{
cmd.Dispose();
conn.Close();