【问题标题】:C# Check if value is returned from databaseC# 检查是否从数据库返回值
【发布时间】:2013-11-16 19:28:15
【问题描述】:
 SqlCeConnection sqlCnn = new SqlCeConnection("Data Source=" + Application.StartupPath + "\\mainDB.sdf");
 SqlCeCommand sqlCmd = new SqlCeCommand("SELECT * FROM Accounts WHERE (username = @user AND password = @pass)", sqlCnn);
 sqlCmd.Parameters.Add("@user", textBox1.Text);
 sqlCmd.Parameters.Add("@pass", textBox2.Text);
 sqlCnn.Open();
 SqlCeDataReader reader = sqlCmd.ExecuteReader();
 while (reader.Read())
 {
    // Some code ...
 }

我有这段代码从数据库中读取一些值,但我想检查是否从数据库返回了任何值。我想检查数据库中的usernamepassword 是否等于textBox1textBox2,如果不是,则返回失败消息。

【问题讨论】:

    标签: c# winforms visual-studio-2010 oop


    【解决方案1】:

    只需像这样使用代码:

    if(reader.Read()){
       //your code
    }else {
      //Show message notifying failure
    }
    //remember to close your reader
    reader.Close(); //or use using statement for convenience.
    

    但是DataReader 主要用于读取一组数据(仅 1 条记录有点矫枉过正)。您可以尝试稍微修改您的查询,例如使用If Exists(...)... 并使用ExecuteScalar() 来获取返回结果。如果不是null,那没关系。

    //the modified query
    If Exists(SELECT * FROM Accounts WHERE (username = @user AND password = @pass))
    SELECT 1 ELSE SELECT 0
    
    var r = sqlCmd.ExecuteScalar();
    if(r == null || (int)r == 0){
      //failure...
    }
    

    【讨论】:

      【解决方案2】:

      我会“从...中选择 count(*)”

      然后改为执行 ExecuteScalar()。这将返回一个 int。

      SqlCeConnection sqlCnn = new SqlCeConnection("Data Source=" + Application.StartupPath + "\\mainDB.sdf");
       SqlCeCommand sqlCmd = new SqlCeCommand("SELECT count(*) FROM Accounts WHERE (username = @user AND password = @pass)", sqlCnn);
       sqlCmd.Parameters.Add("@user", textBox1.Text);
       sqlCmd.Parameters.Add("@pass", textBox2.Text);
       sqlCnn.Open();
       int recordCount = (int)sqlCmd.ExecuteScalar();
      
      if (recordCount > 0)
      {
      //dostuff
      }
      

      【讨论】:

      • 当没有行时会抛出NullReferenceException
      【解决方案3】:

      检查您的 Datateader 是否有带有 reader.HasRows 的行。

      有关更多信息,请参阅此 SO 帖子 How to check if SQLDataReader has no rows

      【讨论】:

        猜你喜欢
        • 2021-08-22
        • 2021-04-16
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        • 2015-06-18
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多