簡體   English   中英

即使數據庫中的記錄已經存在,.Rows.Count 總是返回 -1?

[英].Rows.Count always returns -1 even if record in database already exists?

基本上我想使用 c# 檢查數據庫中是否已經存在用戶名。 如果沒有 - 它必須被創建。 下面是正是這樣做的代碼(在我看來只有檢查部分很重要,但我已經添加了添加部分的代碼)

問題是不管它是否存在,它總是返回 -1

public Boolean checkUser()
        {

            var connection = new MySqlConnection("Server=127.0.0.1;Database=book_library;user=root;password=root2");

            var table = new DataTable();

            connection.Open();

            string checkUsernameQuery = "SELECT * FROM accounts WHERE username = 'usernameInputField.Text'";

            var adapter = new MySqlDataAdapter();

            MySqlCommand command = new MySqlCommand(checkUsernameQuery, connection);

            //command.Parameters.Add("@username", MySqlDbType.VarChar).Value = usernameInputField.Text;

            adapter.SelectCommand = command;
            adapter.Fill(table);

            if (table.Rows.Count > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

這是添加部分(只是添加它,但它與問題不太相關)

 private void registerIconButton_Click(object sender, EventArgs e)
        {
            checkUser();

            var connection = new MySqlConnection("Server=127.0.0.1;Database=book_library;user=root;password=root2");

            connection.Open();

            string insertQuery = "INSERT INTO `accounts` (username, password, email) VALUES ('" + usernameInputField.Text + "','" + passwordInputField.Text + "','" + emailInputField.Text + "')";

            MySqlCommand command = new MySqlCommand(insertQuery, connection);

            command.Parameters.Add("@username", MySqlDbType.VarChar).Value = usernameInputField.Text;
            command.Parameters.Add("@password", MySqlDbType.VarChar).Value = passwordInputField.Text;
            command.Parameters.Add("@email", MySqlDbType.VarChar).Value = emailInputField.Text;

            if (checkUser())
            {
                MessageBox.Show("This username already exists!");
            }
            else
            {

                if (command.ExecuteNonQuery() == 1)
                {

                }
                else
                {
                    MessageBox.Show("ERROR");
                }
            }

            connection.Close();

        }

連接和命令是一次性的,因此您應該using塊將它們放入內部以確定性地清理資源。

如果您只想知道是否存在某些東西,您可以使用ExecuteScalar而不是使用重量級適配器。

然后只需返回表達式的結果!= null即可獲得指示用戶是否存在的 boolean。

using(var connection = new MySqlConnection("Server=127.0.0.1;Database=book_library;user=root;password=root2"))
using(var cmd = connection.CreateCommand())
{
    connection.Open();

    string checkUsernameQuery = "SELECT TOP 1 username FROM accounts WHERE username = @p1";

    cmd.Parameters.Add(new MySqlParameter("@p1", MySqlDbType.VarChar).Value = usernameInputField.Text;

    var user = cmd.ExecuteScalar();

    return user != null;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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