C# 试图读取受写保护的内存。这通常表示其他内存已损坏
我使用C#和sql server compact 3.5开发了一个桌面应用程序 我已经导入了所有必要的dllC# 试图读取受写保护的内存。这通常表示其他内存已损坏,c#,sql-server-ce,C#,Sql Server Ce,我使用C#和sql server compact 3.5开发了一个桌面应用程序 我已经导入了所有必要的dll System.Data.SqlServerCe.dll sqlceca35.dll sqlcecompact35.dll sqlceer35EN.dll sqlceme35.dll sqlceoledb35.dll sqlceqp35.dll sqlcese35.dll 当我在客户机上安装安装程序时,它将在database.sdf中准确插入,并检索数据以自动完成 当我想从中检索数据以
- System.Data.SqlServerCe.dll
- sqlceca35.dll
- sqlcecompact35.dll
- sqlceer35EN.dll
- sqlceme35.dll
- sqlceoledb35.dll
- sqlceqp35.dll
- sqlcese35.dll
attempted to read write protected memory.
this is often an indication that other memory is corrupt
注意:如果我在另一台装有VS 2008的电脑上安装此安装程序,它将正常工作,不会出现任何错误。我需要在客户端Pc上安装一些东西吗
我也尝试建立
在VS2008中:
Tools->Options
Debugging->General
uncheck option "Suppress JIT optimization on module load"
但结果是一样的
下面是一个用于存储和检索数据库数据的类
class dataBase
{
private SqlCeDataAdapter ad;
private SqlCeCommand cmd;
private string StringdbFileName=("Data Source=" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\sp.sdf").Replace(@"file:\", "");
private SqlCeConnection coon;
public dataBase()
{
coon = new SqlCeConnection(StringdbFileName);
coon.Close();
}
public int ExecuteSQL(string Query)
{
try
{
coon.Open();
cmd = new SqlCeCommand();
cmd.Connection = this.coon;
cmd.CommandText = Query;
return cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
coon.Close();
}
}
public DataTable GetDataTable(string Query)
{
try
{
coon.Open();
DataTable dt = new DataTable();
cmd = new SqlCeCommand();
cmd.CommandText = Query;
ad = new SqlCeDataAdapter(Query,coon);
ad.Fill(dt);
return dt;
}
catch (Exception ex)
{
throw ex;
}
finally
{
coon.Close();
}
}
public void FillComboBox(string Query, string DisplayMember,string ValueMember, ComboBox cmb)
{
try
{
coon.Open();
DataTable dt = new DataTable();
cmd = new SqlCeCommand();
cmd.CommandText = Query;
ad = new SqlCeDataAdapter(Query, coon);
ad.Fill(dt);
cmb.DataSource = dt;
cmb.DisplayMember = DisplayMember;
cmb.ValueMember = ValueMember;
}
catch (Exception ex)
{
throw ex;
}
finally
{
coon.Close();
}
}
}
根据我的经验,当您从不同的线程访问同一个SqlConnection时,就会发生这种情况
SQL CE对线程不是很友好。根据我的经验,当您从不同线程访问同一个SqlConnection时,就会发生这种情况
SQL CE不是非常线程友好。请显示引发此异常时调用的代码。还包括完整的调用堆栈信息。这是一个多线程应用程序吗?您会得到这个错误,因为您是通过一个坏指针访问受保护内存的。可能是因为指针已损坏。正如错误消息所说。将问题简化为一个小程序,该程序将重现问题并将其发布在此处。通过这样做,你要么自己找到bug,要么产生一些我们可以实际分析的东西。在这个类中,1)ExecuteSQL(字符串查询);此方法用于插入工作精细2)GetDataTable(字符串查询);此方法适用于Fill DatGrid和Auto complete,但仅适用于AutoComplete,不适用于DataGrid 3)FillComboBox(字符串查询、字符串显示成员、字符串值成员、ComboBox cmb)此方法适用于FillComboBox请显示引发此异常时调用的代码。还包括完整的调用堆栈信息。这是一个多线程应用程序吗?您会得到这个错误,因为您是通过一个坏指针访问受保护内存的。可能是因为指针已损坏。正如错误消息所说。将问题简化为一个小程序,该程序将重现问题并将其发布在此处。通过这样做,你要么自己找到bug,要么产生一些我们可以实际分析的东西。在这个类中,1)ExecuteSQL(字符串查询);此方法用于插入工作精细2)GetDataTable(字符串查询);此方法适用于Fill DatGrid和Auto complete,但仅适用于AutoComplete,不适用于DataGrid 3)Fill ComboBox(字符串查询、字符串显示成员、字符串值成员、ComboBox cmb)此方法适用于Fill ComboBox,因此如何处理此称呼我做了一些更改我的问题请审阅it@leppie:请指定如何处理此问题。谢谢。@Agent007:确保
SqlCeConnection
仅从一个线程使用。那么如何处理这个称呼呢?我已经做了一些更改,请审阅我的问题it@leppie:请指定如何处理此问题。谢谢。@Agent007:确保仅从一个线程使用SqlCeConnection
。