如何从SqlCommand获取特定值

时间:2015-02-27 17:40:13

标签: c# asp.net sql-server

我想将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();

但它没有打印价值,也没有在标签上显示价值。该怎么办?代码有什么问题吗?

2 个答案:

答案 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();
                }
            }
        }