[英].NET SqlDataReader: SqlException was unhandled by user code
使用創建的SQL Server表來構建簡單的.NET Web應用程序。 關於SqlDataReader,我不斷收到錯誤消息,並一直停留在出錯的地方。
這是我的錯誤:其他信息:關鍵字“表”附近的語法不正確。
這是我的代碼:
編輯:
bool authenticated = AuthenticateMe(txtUsername.Text, txtPassword.Text);
if (authenticated)
{
Response.Redirect("Home.aspx");
}
else
{
Response.Redirect("Default.aspx");
}
}
private bool AuthenticateMe(string username, string password)
{
// string ErrorMessage = "";
string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;Connect Timeout=30";
string commandText = "SELECT Username from [Table] where Username = @name AND Password = @pwd";
// try
// {
using (SqlConnection sqlConnection1 = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(commandText, sqlConnection1))
{
sqlConnection1.Open();
cmd.Parameters.AddWithValue("@name", username);
cmd.Parameters.AddWithValue("@pwd", password);
int result = (int)cmd.ExecuteNonQuery();
if (result > 0)
{
return true;
}
else
{
return false;
}
}
}
第一版(修改前):
protected void bnLogin_Click(object sender, EventArgs e)
{
bool authenticated = AuthenticateMe(txtUsername.Text, txtPassword.Text);
if (authenticated)
{
Response.Redirect("Home.aspx");
}
else
{
Response.Redirect("Default.aspx");
}
}
private bool AuthenticateMe(string userName, string password)
{
string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;Connect Timeout=30";
SqlConnection sqlConnection1 = new SqlConnection(connectionString);
sqlConnection1.Open();
SqlCommand cmd = new SqlCommand("SELECT Username from Table where Username = userName");
cmd.Connection = sqlConnection1;
SqlDataReader reader = cmd.ExecuteReader();
Response.Write("Entered Sucessfully");
reader = cmd.ExecuteReader();
string localUserName = (string)reader["Username"];
sqlConnection1.Close();
if (userName.Equals(localUserName))
{
return true;
}
else
{
return false;
}
表是SQL中的保留關鍵字。 嘗試在其周圍放置方括號:
SqlCommand cmd = new SqlCommand("SELECT Username from [Table] where Username = userName");
表是一個關鍵字。 如果您的表名為Table
,則您的sql必須對其進行轉義。 嘗試[Table]
。
還要注意,您將要為用戶名使用一個參數-即where Username = @userName
,您還需要在該命令中將具有該名稱的參數添加到具有適當值的命令。
我認為您的SQL查詢有2個問題。
“ 從表中選擇用戶名,其中用戶名=用戶名 ”
最后一部分, Username = username ,也是錯誤的。 如果您打算在那里有一個常量字符串,則應考慮將用戶名放在引號\\'username \\'中 。 不要忘記逃生符號。 如果要向SQLCommand傳遞參數,請在查詢中使用@username並以這種方式傳遞值
cmd.Parameters [“ @ username”]。Value =“ Bob”;
您的AuthenticateMe方法似乎有點錯誤,無法驗證用戶身份
所以你可以這樣重寫代碼
private bool AuthenticateMe(string userName, string password)
{
string connectionString = @".....";
string commandText = "SELECT COUNT(*) from [Table] where Username = @name AND Pass = @pwd");
using(SqlConnection sqlConnection1 = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand(commandText, sqlConnection1))
{
sqlConnection1.Open();
cmd.Parameters.AddWithValue("@name", username);
cmd.Parameters.AddWithValue("@pwd", password);
int result = Convert.ToInt32(cmd.ExecuteScalar());
return (result > 0);
}
}
另外,請記住,將密碼以純文本格式存儲在數據庫中被認為是一種不好的做法。 如果有人獲得了數據庫的副本,應該對記憶的密碼應用某種哈希函數,以防止出現任何安全問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.