日期:2014-05-17  浏览次数:21283 次

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
                {
           &nbs