解决:试读取或写入受保护的内存。这通常指示其他内存已损坏

本文详细解析了在使用OleDbDataReader进行数据库操作时遇到的内存读写错误,通过示例代码展示了如何正确使用using语句来确保资源的正确释放,避免内存泄漏问题。

 

ContractedBlock.gifExpandedBlockStart.gifCode
            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对象没有关闭

ContractedBlock.gifExpandedBlockStart.gifCode
            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();
                    }
                }
            }

转载于:https://www.cnblogs.com/kolokolo/articles/1273812.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值