需要检索数据并转换为IF语句的int

怪狼

新成员
已加入
2015年10月1日
留言内容
1
编程经验
Beginner
好的,我目前正在尝试从访问数据库文件中读取一些数据,将其转换为int,然后将其用于IF语句,但是现在如果我尝试加载它,我会得到一个"行/列中无数据"错误,我不太清楚为什么。
C#:
[/COLOR][COLOR=#333333]int Niv = 0;[/COLOR]
        try
        {
            conn.Open();
            OleDbDataReader reader = null;
            OleDbCommand cmd = new OleDbCommand("Select Niveau From Tabel1 where ID=" + txt_userID.Text + "", conn);
            reader = cmd.ExecuteReader();
            Niv = Convert.ToInt32(reader["Niveau"].ToString());
            conn.Close();
            MessageBox.Show(Niv.ToString());
        }
        catch(Exception ex) 
[FONT=Verdana]             { MessageBox.Show(ex.Message); }[/FONT][FONT=Verdana]
[/ FONT]
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,521
地点
悉尼,澳大利亚
编程经验
10+
创建后,数据读取器位于数据的第一行之前。您必须调用Read将其前进到第一行,然后再次调用Read以前进到后续行。网络上使用数据读取器的每个示例都可以证明这一点。

关于该代码,还有其他几点值得注意。

1.这:
OleDbCommand cmd = new OleDbCommand("Select Niveau From Tabel1 where ID=" + txt_userID.Text + "", conn);
应该是这样的:
OleDbCommand cmd = new OleDbCommand("Select Niveau From Tabel1 where [email protected]", conn);

cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(txt_userID.Text);
2.这:
Niv = Convert.ToInt32(reader["Niveau"].ToString());
应该是这样的:
Niv = reader.GetInt32(reader.GetOrdinal("Niveau"));
如果数据表示整数,则应将其存储为整数并以整数形式检索,而不是先转换为String,再转换为Int32。
 
最佳 底部