簡體   English   中英

.NET SqlDataReader:用戶代碼未處理SqlException

[英].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個問題。

從表中選擇用戶名,其中用戶名=用戶名

  1. 是保留關鍵字。 該表或[Table]使用其他名稱。
  2. 最后一部分, Username = username ,也是錯誤的。 如果您打算在那里有一個常量字符串,則應考慮將用戶名放在引號\\'username \\'中 不要忘記逃生符號。 如果要向SQLCommand傳遞參數,請在查詢中使用@username並以這種方式傳遞值

    cmd.Parameters [“ @ username”]。Value =“ Bob”;

您的AuthenticateMe方法似乎有點錯誤,無法驗證用戶身份

  • 您使用的保留關鍵字(表格)沒有適當的定界符(方括號)
  • 您不會將用戶名和密碼傳遞給檢查用戶是否存在的查詢
  • 您兩次調用ExecuteReader(?)
  • 您檢查查詢返回的值是否與用於搜索的值相同(無用)

所以你可以這樣重寫代碼

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM