如何在组合框中从数据库中检索数据c#

时间:2014-05-25 19:11:07

标签: c# ado.net sqlcommand

我写了这段代码,但我不知道为什么这行会出错!

 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
}

3 个答案:

答案 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();