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 ...
}
我有这个代码从数据库读取一些值,但我想检查是否从数据库返回任何值。我想检查数据库中的username
和password
是否等于textBox1
和textBox2
,如果不是,则返回失败消息。
答案 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。