我在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”类型异常。
以下是上述表格的打印屏幕:
有人可以帮忙吗?
答案 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处理您的SqlConnection
,SqlCommand
和SqlDataAdapter
。
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"];
您可以从以下位置获取连接字符串:
答案 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;