0

我正在用 ASP.NET 开发这个网站并使用 C#。我收到错误消息:使用未分配的变量 usn。数据库也不为空。我的代码是:

protected void Button1_Click(object sender, EventArgs e)
{

    SqlConnection cn = new SqlConnection();
    SqlCommand cm = new SqlCommand();
    SqlDataReader dr;
    cn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Vijaylaxmi\Desktop\TrainReserveold\App_Data\Database.mdf;Integrated Security=True;User Instance=True";
    cn.Open();
    cm.Connection = cn;
    String usn;
    cm.CommandText = "Select UserName from User where UserName='" + TextBox1.Text + "'";
    dr = cm.ExecuteReader();
    while (dr.Read())
    {
        usn = dr.GetString(0);
    }
   if (String.Compare(usn, TextBox1.Text) != 0)
    {
        Response.Write("Invalid user name... try again");
        TextBox1.Text = "";
        TextBox2.Text = "";
        TextBox1.Focus();
    }
   Response.Write("user valid now");
}
4

3 回答 3

3

我在这里看到了几个问题。在具体回答您的问题时,您想替换它:

dr = cm.ExecuteReader();
while(dr.Read())
{
  usn = dr.GetString(0);
}

有了这个:

usn = cm.ExecuteScalar().ToString();

请务必先检查 DBNull,以防万一。

更一般地说,您希望
a) 参数化您的 SQL(或者,更好的是,使用存储过程)而不是使用原始输入。这将保护您免受 SQL 注入攻击。
b) 不要在代码中直接包含您的连接字符串。把它放在一个配置文件中。绝对不要将其发布在互联网上。

于 2011-12-21T17:14:33.560 回答
1

将 usn 字符串设置为

string usn = string.empty; then go from there
//create a Stored Procedure and put your Select Statement in there.. to avoid Sql Injection
cmd.CommandText = "name of your stored proc";
cmd.CommandType = System.Data.CommandType.StoredProcedure;

我还会根据您正在运行的应用程序类型从 web.config 或 app.config 读取我的 sql connectiong 字符串。

于 2011-12-21T17:09:25.770 回答
0

更改您的 cm.CommandText = "Select UserName from User where UserName= to

  cm.CommandText = string.Format("Select UserName from User where UserName= '{0}'",Textbox1.Text);
于 2011-12-21T17:13:50.357 回答