从C#中的数据库读取数据

时间:2014-12-26 08:28:23

标签: c# sql-server database

我在SQL Server中名为ChatBotDataBase的数据库中创建了一个表名词汇表。我想在表的特殊列中读取数据。

为此,我写了这段代码:

    private void button1_Click(object sender, EventArgs e)
    {
        SqlConnection sc = new SqlConnection();
        sc.ConnectionString = @"Data Source=shirin;Initial Catalog=ChatBotDataBase; 
        Integrated Security=True";
        SqlDataAdapter sda = new SqlDataAdapter();
        sda.SelectCommand = new SqlCommand();
        sda.SelectCommand.Connection = sc;

        sda.SelectCommand.CommandText = "SELECT * FROM glossary";

        DataTable table = new DataTable();
        MessageBox.Show(table.Rows[0].ItemArray[3].ToString());
    } 

但最后一行有错误。

错误是:

  

System.Data.dll中发生了未处理的“System.IndexOutOfRangeException”类型异常。

以下是上述表格的打印屏幕:enter image description here

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:6)

您的sql server中的数据库表看起来很混乱Datatable table。在您的图像中,您向我们展示了SQL Server中的glossary表,而不是DataTable table。{/ p>

您收到此错误是因为您使用DataTable创建了一个名为table的空DataTable table = new DataTable(),但您甚至没有填充table。这就是默认情况下它没有任何行的原因。

SqlCommand cmd = new SqlCommand("SELECT * FROM glossary");
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(table);

还可以使用using statement处理您的SqlConnectionSqlCommandSqlDataAdapter

using(SqlConnection sc = new SqlConnection(conString))
using(SqlCommand cmd = sc.CreateCommand())
{
   cmd.CommandText = "SELECT * FROM glossary";
   ...
   using(SqlDataAdapter sda = new SqlDataAdapter(cmd))
   {
      DataTable table = new DataTable();
      sda.Fill(table);

      if(dt.Rows.Count > 0)
         MessageBox.Show(table.Rows[0].ItemArray[3].ToString());
   }
}

答案 1 :(得分:4)

以下代码可以帮助您

    sda.SelectCommand.CommandText = "SELECT * FROM glossary";
    DataTable table = new DataTable();
    sda.Fill(table , "glossary");
    MessageBox.Show(table.Rows[0].ItemArray[3].ToString());

答案 2 :(得分:2)

您尚未执行查询或填充表格。它是空的。它没有列,也没有行。因此错误。

坦率地说,我强烈建议使用类型化的类模型,而不是任何类型的DataTable。使用像“dapper”这样的工具,这可以很简单:

var list = conn.Query<Glossary>("SELECT * FROM glossary").ToList();

使用

public class Glossary {
    public int Id {get;set}
    public string String1 {get;set} // horrible name!
    ....
    public int NumberOfUse {get;set}
}

答案 3 :(得分:0)

using System.Data.Odbc;

OdbcConnection con = new OdbcConnection("<connectionstring>");

OdbcCommand com = new OdbcCommand("select * from TableX",con);

OdbcDataAdapter da = new OdbcDataAdapter(com);
DataSet ds = new DataSet();

da.Fill(ds,"New");

DataGrid dg = new DataGrid();
dg.DataSource = ds.Tables["New"];

您可以从以下位置获取连接字符串:

http://www.connectionstrings.com/

答案 4 :(得分:0)

亲爱的,请先用数据填写表格。 你应该使用检查,因为如果没有数据,那么你得到一个正确的消息。检查在下面..

if(dt.Rows.Count > 0)
     MessageBox.Show(table.Rows[0].ItemArray[3].ToString());
else if(dt.Rows.Count > 0)
      MessageBox.Show("Table is empty");

其他建议是你应该将数据显示到DataGrid ....将数据从数据库显示到消息框中不是一个好的编程方法..

在C#中将DataTable显示到DataGrid中就像下面这样简单。

        SqlCommand cmd = new SqlCommand("select * from student",con);
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;
        DataTable dt = new DataTable();
        dt.TableName = "students";
        da.Fill(dt);
        dataGridView1.DataSource =dt;