解决:试读取或写入受保护的内存。这通常指示其他内存已损坏
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
using (OleDbConnection conn = new OleDbConnection(ConnectionString.ConnString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
try
{
cmd.CommandText = "select * from 新闻 where 编号=@编号";
cmd.Parameters.AddWithValue("@编号", Request.QueryString["id"].ToString());
cmd.Connection = conn;
conn.Open();
OleDbDataReader odr = cmd.ExecuteReader(CommandBehavior.SingleRow);
if (odr.Read())
{
la_Title.Text = odr["标题"].ToString();
Li_Date.Text = odr["发布时间"].ToString();
Li_LaiYuan.Text = odr["来源"].ToString();
Li_Content.Text = odr["内容"].ToString();
}
}
catch
{
}
finally
{
conn.Close();
}
}
}
运行上面的代码时报错:试读取或写入受保护的内存。这通常指示其他内存已损坏
其实是由于代码的错误造成的,原因是由于OleDbDataReader对象没有关闭
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
using (OleDbConnection conn = new OleDbConnection(ConnectionString.ConnString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
try
{
cmd.CommandText = "select * from 新闻 where 编号=@编号";
cmd.Parameters.AddWithValue("@编号", Request.QueryString["id"].ToString());
cmd.Connection = conn;
conn.Open();
OleDbDataReader odr = cmd.ExecuteReader(CommandBehavior.SingleRow);
using (odr)
{
if (odr.Read())
{
la_Title.Text = odr["标题"].ToString();
Li_Date.Text = odr["发布时间"].ToString();
Li_LaiYuan.Text = odr["来源"].ToString();
Li_Content.Text = odr["内容"].ToString();
}
}
}
catch
{
}
finally
{
conn.Close();
}
}
}