2012-07-12 19 views
3

我已成功检查数据库中是否有值。检查记录后,读卡器无法继续

下面是代码:

if (!reader.Read()) 
{ 
    MessageBox.Show(" Can not find user!"); 
    reader.Close(); 
} 
else 
{ 
    int count = 0; 
    while (reader.Read()) 
    { 
     string user = (string)reader.GetString(0); 
     string name = (string)reader.GetString(1); 
     int roll = (int)reader.GetInt32(2); 
     string phone = (string)reader.GetString(3); 
     string address = (string)reader.GetString(4); 
     string birthofdate = (string)reader.GetString(5); 
     label1.Text = "" + roll; 
     label2.Text = name; 
     label3.Text = birthofdate; 
     label4.Text = "" + phone; 
     label5.Text = address; 
    } 
} 

但问题是,while循环反正跳过。

+0

是否检查过标签的可见性? – 2012-07-12 06:35:12

+0

你真的想要演员吗?'GetString'将返回字符串和'GetInt32'一个int – V4Vendetta 2012-07-12 06:37:10

回答

5

更换

if (!reader.Read()) 

if (!reader.HasRows) 
+0

非常感谢你,它解决了我的问题,并作为梦想工作^^ – famfamfam 2012-07-12 06:43:38

+3

@fukemyfukemy:考虑到[接受](http: //meta.stackexchange.com/a/5235/147438)对你最有帮助的答案。 – 2012-07-12 07:00:27

0

你不应该使用reader.Read()两次,用它只有一次

if (!reader.HasRows) 
       { 
        MessageBox.Show(" Can not find user!"); 
        reader.Close(); 
       } 
       else 
       { 
        int count = 0; 
        while (reader.Read()) 
        { 
         string user = (string)reader.GetString(0); 
         string name = (string)reader.GetString(1); 
         int roll = (int)reader.GetInt32(2); 
         string phone = (string)reader.GetString(3); 
         string address = (string)reader.GetString(4); 
         string birthofdate = (string)reader.GetString(5); 
         label1.Text = "" + roll; 
         label2.Text = name; 
         label3.Text = birthofdate; 
         label4.Text = "" + phone; 
         label5.Text = address; 

        } 
       } 
2

我只想有循环,使你拨打Read一个的地方,并检查count算账:

int count = 0; 
while (reader.Read()) 
{ 
    ... 
} 
if (count == 0) 
{ 
    MessageBox.Show(" Can not find user!"); 
} 

我已经删除了reader.Close()呼叫 - 只要你reader处于using语句(应该是),它会自动关闭。