?C#大神求解 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

sqarenix 2018-04-21 09:50:24
代码功能就是将CSV文件数据导入到ACCESS数据库里。
在调试过程中运行一次不会报错,但是连续运行多次就出错(次数不定,有时3次有时5次)
运行到 OleDbConnection.open() 时会报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
网上查过一些类似问题,说是改目标平台为“Anycpu”能解决,但是亲测失败(倒是比X86能多运行几次。。。)
环境 win7 32位,vs2010,framework 4.5 版本
本人初学者,希望大神们解释的尽量通俗点。谢谢

错误描述如下:
未处理 System.AccessViolationException
HResult=-2147467261
Message=尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
Source=System.Data
StackTrace:
在 System.Data.OleDb.DataSourceWrapper.InitializeAndCreateSession(OleDbConnectionString constr, SessionWrapper& sessionWrapper)
在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
在 System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
在 System.Data.OleDb.OleDbConnection.Open()
在 GXCTV1.FMWTK.insClk(String CLkPathNam) 位置 C:\Users\Administrator.SKY-20170415EAI\Documents\Visual Studio 2010\Projects\GXCTV1\GXCTV1\FMWTK.cs:行号 866
在 GXCTV1.FMWTK.insWtk_Click(Object sender, EventArgs e) 位置 C:\Users\Administrator.SKY-20170415EAI\Documents\Visual Studio 2010\Projects\GXCTV1\GXCTV1\FMWTK.cs:行号 485
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
InnerException:
...全文
1703 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sqarenix 2018-04-24
  • 打赏
  • 举报
回复
close() dispose()都加了还是不行
引用 4 楼 hdt 的回复:
推测,open后没有close
真相重于对错 2018-04-24
  • 打赏
  • 举报
回复
或者是open与close不匹配
真相重于对错 2018-04-24
  • 打赏
  • 举报
回复
推测,open后没有close
Lite_- 2018-04-24
  • 打赏
  • 举报
回复
调用dll 如果有使用到结构体的要加 ref
sqarenix 2018-04-23
  • 打赏
  • 举报
回复
有没有大神知道的,搞不定啊
sqarenix 2018-04-22
  • 打赏
  • 举报
回复
部分源代码如下 string CsvPath = Path.GetDirectoryName(CLkPathNam);//获取文件目录 string CsvName = Path.GetFileName(CLkPathNam);//获取文件名 string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + CsvPath + ";Extended Properties='text;HDR=YES;FMT=Delimited';";//注意:数据源只要目录 不用文件名,HDR=YES指第一行为表头 try { using (OleDbConnection cnClk = new OleDbConnection(connstring)) { cnClk.Open(); DataSet ds = new DataSet(); DataTable dt = new DataTable(); string sql = "select * from " + CsvName;//只有路径没有文件名,与读取Excel文件不同 OleDbDataAdapter adp = new OleDbDataAdapter(sql, cnClk); adp.Fill(ds, "ZB"); dt = ds.Tables["ZB"]; if (dt.Rows.Count > 0) { //连接ACCESS数据库 DAO.DBEngine dbEngine = new DAO.DBEngine(); DAO.Database db = dbEngine.OpenDatabase(accessFilePath); //打开ZBCache表 DAO.Recordset rs = db.OpenRecordset("ZBCache"); //省略部分 就是循环赋值。 rs.Close(); db.Close(); } else { MessageBox.Show("无数据"); } } } 多次运行后 cnClk.Open();会报错 ”尝试读取或写入受保护的内存。这通常指示其他内存已损坏” 谢谢大家帮忙
xian_wwq 2018-04-22
  • 打赏
  • 举报
回复
lz最好贴些关键代码 报错信息无法反推出代码是怎么写的

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧