已有打开的与此命令相关联的 DataReader,必须首先将它关闭。
SqlConnectioncn=newSqlConnection();cn.ConnectionString="datasource=.;initialcatalog=o...
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "data source=.;initial catalog=oa;integrated security=sspi";
cn.Open();
SqlCommand cmd = new SqlCommand("select 是否已阅 from Msg where 收信人='" + b + "' and 是否已阅 ='否'",cn );
if (cmd .ExecuteReader() !=null )
{
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
Label1.Text = dr.GetString(0).ToString();
dr.Close();
Label6.Text = "您有新短信,请注意查收!";
} 展开
cn.ConnectionString = "data source=.;initial catalog=oa;integrated security=sspi";
cn.Open();
SqlCommand cmd = new SqlCommand("select 是否已阅 from Msg where 收信人='" + b + "' and 是否已阅 ='否'",cn );
if (cmd .ExecuteReader() !=null )
{
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
Label1.Text = dr.GetString(0).ToString();
dr.Close();
Label6.Text = "您有新短信,请注意查收!";
} 展开
3个回答
展开全部
稍微标准点的写法
SqlConnection cn = null;
SqlCommand cmd = null;
SqlDataReader dr = null;
cn = new SqlConnection();
cn.ConnectionString = "data source=.;initial catalog=oa;integrated security=sspi";
cmd = new SqlCommand("select 是否已阅 from Msg where 收信人='" + b + "' and 是否已阅 ='否'", cn);
try
{
cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr != null)
{
if (dr.Read())
{
Label1.Text = dr.GetString(0).ToString();
Label6.Text = "您有新短信,请注意查收!";
}
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
if (dr != null) dr.Close();
if (cmd != null) cmd.Dispose();
if (cn != null) cn.Dispose();
}
程序还有很多问题不规范
比如
select 是否已阅 from Msg where 收信人='" + b + "' and 是否已阅 ='否'"
==
既然知道条件是 是否已阅 ='否',那就根本没必要 select 是否已阅...
改成
select 1 from Msg where 收信人='" + b + "' and 是否已阅 ='否'"即可
再比如
刚才使用的是拼接sql语句,已经基本被摒弃了,网上搜搜"参数化语句"和"sql注入"就知道了
SqlConnection cn = null;
SqlCommand cmd = null;
SqlDataReader dr = null;
cn = new SqlConnection();
cn.ConnectionString = "data source=.;initial catalog=oa;integrated security=sspi";
cmd = new SqlCommand("select 是否已阅 from Msg where 收信人='" + b + "' and 是否已阅 ='否'", cn);
try
{
cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr != null)
{
if (dr.Read())
{
Label1.Text = dr.GetString(0).ToString();
Label6.Text = "您有新短信,请注意查收!";
}
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
if (dr != null) dr.Close();
if (cmd != null) cmd.Dispose();
if (cn != null) cn.Dispose();
}
程序还有很多问题不规范
比如
select 是否已阅 from Msg where 收信人='" + b + "' and 是否已阅 ='否'"
==
既然知道条件是 是否已阅 ='否',那就根本没必要 select 是否已阅...
改成
select 1 from Msg where 收信人='" + b + "' and 是否已阅 ='否'"即可
再比如
刚才使用的是拼接sql语句,已经基本被摒弃了,网上搜搜"参数化语句"和"sql注入"就知道了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "data source=.;initial catalog=oa;integrated security=sspi";
cn.Open();
SqlCommand cmd = new SqlCommand("select 是否已阅 from Msg where 收信人='" + b + "' and 是否已阅 ='否'",cn );
using(SqlDataReader dr = cmd.ExecuteReader())
{
try{
dr.Read();
Label1.Text = dr.GetString(0).ToString();
dr.Close();
Label6.Text = "您有新短信,请注意查收!";
}catch{}
}
con.Close();
//光给代码不知道你看得懂不....也没什么好说的,楼上几位把该说的都说完了....
cn.ConnectionString = "data source=.;initial catalog=oa;integrated security=sspi";
cn.Open();
SqlCommand cmd = new SqlCommand("select 是否已阅 from Msg where 收信人='" + b + "' and 是否已阅 ='否'",cn );
using(SqlDataReader dr = cmd.ExecuteReader())
{
try{
dr.Read();
Label1.Text = dr.GetString(0).ToString();
dr.Close();
Label6.Text = "您有新短信,请注意查收!";
}catch{}
}
con.Close();
//光给代码不知道你看得懂不....也没什么好说的,楼上几位把该说的都说完了....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
改为:SqlDataReader dr=cmd.ExecuteReader(); if(){}将两次执行改为一次,因为两次的执行冲突,if()括号里的执行语句还未关闭.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询