查询未按预期执行,returns -1 无论如何

Query not executing as expected, returns -1 no matter what

我正在为学期期末开发用户登录系统。我在 Visual Studio 和 ADO.NET 中使用 C#。我有一个在名为 Credentials:

的数据库 table 上使用的查询
SELECT * FROM Credentials WHERE Username = @Username AND Password = @Password

我也有字符串连接

Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|UserCredentials.mdf;Integrated Security=True;

然后我 运行 对 table 和 int count = selectCommand.ExecuteNonQuery(); 的查询。 selectCommand 是包含上述查询的 SqlCommand 对象。无论如何,即使我输入现有的用户名和密码,计数也将等于 -1。当有人输入正确的用户名和密码组合时,我希望计数变量为 1。

class DatabaseConnection {
    public static SqlConnection GetConnection() {
        SqlConnection connection = new SqlConnection(
            "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|UserCredentials.mdf;Integrated Security=True;"
        );
        return connection;
    }
}

class LoginDB {
    public static bool IsUser(string username, string password) {
        SqlConnection connection = DatabaseConnection.GetConnection();

        string selectStatement = @"SELECT * FROM Credentials 
                                   WHERE Username = @Username AND Password = @Password";
        SqlCommand selectCommand = new SqlCommand(selectStatement, connection);
        selectCommand.Parameters.AddWithValue("@Username", username);
        selectCommand.Parameters.AddWithValue("@Password", password);

        try {
            connection.Open();
            int count = selectCommand.ExecuteNonQuery();
            MessageBox.Show(count.ToString());
            if (count > 0) {
                return true;
            }
            else {
                return false;
            }
        }
        catch (SqlException ex) {
            throw ex;
        }
        finally {
            connection.Close();
        }
    }
}

最后在用户按下登录时的登录表单中(消息框目前只是一个占位符):

private void btnLogin_Click(object sender, EventArgs e) {
        if (LoginDB.IsUser(txtUsername.Text, txtPassword.Text)) {
            MessageBox.Show("Logged in!");
        }
    }

显然这只是一个大学项目,所以不要说这显然是一种将用户登录到系统的不安全方式。

ExecuteNonQuery 不是您要执行的。这是一个查询。您应该使用 return 一个 SqlDataReader 的 ExecuteReader,然后您可以读取 returned 了多少行。或者 ExecuteScalar 将 return 只有一行的一列。