C#检查数据库是否返回值

时间:2013-11-16 19:28:15

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

 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,如果不是,则返回失败消息。

3 个答案:

答案 0 :(得分: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...
}

答案 1 :(得分:0)

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

然后执行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
}

答案 2 :(得分:0)

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

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