我在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");
}
答案 0 :(得分:3)
我在这里看到的几个问题。在针对您的问题的具体回答中,您想要替换它:
dr = cm.ExecuteReader();
while(dr.Read())
{
usn = dr.GetString(0);
}
用这个:
usn = cm.ExecuteScalar().ToString();
请务必先检查DBNull,以防万一。
更一般地说,你想要
a)参数化您的SQL(或者,更好地,使用存储过程)而不是使用原始输入。这将保护您免受SQL注入攻击。
b)不直接在代码中包含您的连接字符串。把它放在配置文件中。大多数肯定不会在互联网上发布。
答案 1 :(得分:1)
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中读取mysql连接字符串,具体取决于您运行的应用程序类型。
答案 2 :(得分:0)
更改你的cm.CommandText =“从UserName =的User中选择UserName 到
cm.CommandText = string.Format("Select UserName from User where UserName= '{0}'",Textbox1.Text);