我写了这段代码,但我不知道为什么这行会出错!
String sname = dr.GetString ("name");
我的代码:
SqlConnection cn = new SqlConnection(
"Data Source=.;Initial Catalog=logindb;Integrated Security=True");
string query1 = "select * from tbllogin";
SqlCommand cmd = new SqlCommand(query1);
SqlDataReader dr;
try
{
cn.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
String sname = dr.GetString("name");
comboBox1.Items.Add(sname);
}
}
catch (Exception e)
{
// do smth about exception
}
答案 0 :(得分:1)
首先,您必须再次检查:
SqlConnection cn = new SqlConnection(
"Data Source=.;Initial Catalog=logindb;Integrated Security=True");
Data Source=.;
这是错误的,它会给你一个错误。
之后,您可以使用下面的代码来实现您的目标。下面的代码也使用using
语句来处理连接。
using (
SqlConnection connection = new SqlConnection(strCon)) // strCon is the string containing connection string
{
SqlCommand command = new SqlCommand("select * from tbllogin", connection);
connection.Open();
DataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
comboBox1.Items.Add(reader.GetString(int index)); // index of column you want, because this method takes only int
}
}
reader.Close();
}
答案 1 :(得分:0)
MSDN表示SqlDataReader.GetString
方法接受int
作为参数,该列是列的索引。
你需要的是:
while (dr.Read())
{
String sname = (string)dr["name"];
comboBox1.Items.Add(sname);
}
这是您的代码:
SqlConnection cn = new SqlConnection("Data Source=.;Initial Catalog=logindb;Integrated Security=True");
string query1 = "select * from tbllogin"; SqlCommand cmd = new SqlCommand(query1); SqlDataReader dr;
try {
cn.Open(); dr = cmd.ExecuteReader();
while (dr.Read())
{ String sname = (string)dr["name"];
comboBox1.Items.Add(sname);
}
}
catch (Exception e) { MessageBox.Show(e.Message, "An error occurred!"); }
没有正确写入捕获块,您错过了(Exception e)
部分。
答案 2 :(得分:0)
(令人惊讶)GetString
仅将索引作为参数。
见MSDN
public override string GetString(int i)
没有其他签名: - (
但是你可以写:
String sname = dr.Item["name"].ToString();