我想将SqlCommand
的值存储在字符串变量中并将其打印在标签上。这是我的C#代码
String sq="select fullname,emailId from Registration where RgId= '"+Session["RgId"]+"'";
SqlCommand cmd1 = new SqlCommand(sq, con);
con.Open();
SqlDataReader rdr = null;
rdr = cmd1.ExecuteReader();
while(rdr.Read())
{
string fname = (string)rdr["fullname"];
string femail=(string)rdr["emailId"];
Label4.Text = fname;
label5.Text=femail;
}
if(rdr!= null)
{
rdr.Close();
}
con.Close();
但它没有打印价值,也没有在标签上显示价值。该怎么办?代码有什么问题吗?
答案 0 :(得分:0)
要进行SQL查询,而不是连接字符串,这对于促进SQL注入的系统来说非常危险。
在尝试查询并验证查询返回之前验证您的值。
if (Session["RgId"] != null && !String.IsNullOrEmpty(Session["RgId"].ToString()))
{
String sq = "select fullname,emailId from Registration where RgId = @RgId";
SqlCommand cmd1 = new SqlCommand(sq, con);
cmd1.Parameters.Add("@RgId", Convert.ToInt32(Session["RgId"].ToString()));
con.Open();
SqlDataReader rdr = cmd1.ExecuteReader();
if (rdr != null)
{
while (rdr.Read())
{
if (rdr["fullname"] != DBNull.Value && rdr["emailId"] != DBNull.Value)
{
Label4.Text = rdr["fullname"].ToString();
label5.Text = rdr["emailId"].ToString();
}
}
}
if (rdr != null)
{
rdr.Close();
}
con.Close();
}
此致
安德鲁
答案 1 :(得分:0)
我建议在处理db访问时使用using
语句。事情就这样得到了更好的清理。由于你没有在提供的代码中使用try / catch,我会假设你在外层使用它或者其他东西,所以我会:
if (Session["RgId"] == null)
throw new NullReferenceException("RgId");
using (var con = new SqlConnection())
{
const string sql = "select fullname,emailId from Registration where RgId = @RgId";
using (var cmd1 = new SqlCommand(sql, con))
{
cmd1.Parameters.Add(new SqlParameter("RdId", SqlDbType.Int) {Value = Session["RgId"]});
con.Open();
using (var rdr = cmd1.ExecuteReader(CommandBehavior.CloseConnection))
{
if (rdr.Read())
{
Label4.Text = (string) rdr["fullname"];
label5.Text = (string) rdr["emailId"];
}
else
{
//handle registration not found
}
rdr.Close();
}
}
}