Winform SaveFileDialog.ShowDialog 报错:尝试读取或写入受保护的内存
我做了一个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();
conn.Dispose();
}
}
return strValue;
}
SaveFileDialog代码:
private void button2_Click(object sender, EventArgs e)
{
System.GC.Collect();
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Execl?files?(*.xls)|*.xls";
dlg.FilterIndex = 0;
dlg.RestoreDirectory = true;
dlg.CreatePrompt = true;
dlg.Title = "保存为Excel文件";
dlg.InitialDirectory = "C:\";
dlg.ShowDialog(); } winform Access
[解决办法]
ExecuteScalar 返回的可能是个空指针。另外,ExecuteScalar这个名字不知道会不会有问题
[解决办法]
你的保存处理的代码呢?应该是保存的时候出问题了。