首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Winform SaveFileDialog.ShowDialog 报错:尝试读取或写下受保护的内存

2013-02-20 
Winform SaveFileDialog.ShowDialog 报错:尝试读取或写入受保护的内存我做了一个Winform程序,数据库用的Ac

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这个名字不知道会不会有问题

[解决办法]
你的保存处理的代码呢?应该是保存的时候出问题了。

热点排行