额,新手,一点不会sqlite,想要查询一个表而已,却不太会,在网上找了些但都不对,帮忙解答下吧。
代码是这样的
private DataTable KeyWordsBindForGridControlTable1() { DataTable dataT = new DataTable(); using (SQLiteConnection cn = new SQLiteConnection("Data Source=D://test.db;Pooling=true;FailIfMissing=false")) { cn.Open(); using (SQLiteCommand cmd = new SQLiteCommand()) { cmd.Connection = cn; cmd.CommandText = "SELECT * FROM [KeywordTable] limit 20"; SQLiteDataReader drs = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly); dataT = drs.GetSchemaTable(); //DataTable schemaTable = cn.GetSchema("KeywordTable"); //这句报错,不支持这样使用 } } return dataT; }
可视化工具中看到的表是这样的:
这个第一列是表的字段啊,不应该是这样的,想要把查询出来的表直接绑定到Grid中呢,
所以求一个查询sqlite表的代码,先谢过啦~
using (SQLiteConnection conn = new SQLiteConnection(this.textBox1.Text)) { try { conn.Open(); string cmdText = string.Format(@"select * from zentry"); using (SQLiteCommand cmd = new SQLiteCommand(cmdText, conn)) { SQLiteDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { string content = dr.GetString(7); double secondsAbove = dr.GetDouble(6); DateTime begin = new DateTime(2000, 1, 1, 0, 0, 0); DateTime now = begin.AddSeconds(secondsAbove); this.richTextBox1.AppendText(now.ToString("yyyy-MM-dd HH:mm:ss") + "::::" + content + "\r\n"); } }
} catch (Exception x) {
} }
这个也试过啦,这个是获取某一条数据之后就各个列的信息赋值给局部变量吧,我要的是一整张表的.....
@W宁宁:
这是你的语句:
SQLiteDataReader drs = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly);
dataT = drs.GetSchemaTable();
这表示啥?这表示你想要SchemaTable,就是数据列的信息。
你看我的代码呢,直接就执行了查询:
string cmdText = string.Format(@"select * from zentry");
using (SQLiteCommand cmd = new SQLiteCommand(cmdText, conn))
{
SQLiteDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
string content = dr.GetString(7);
=============================================
看出差别了吧?你设定了一个查询语句“SELECT * FROM [KeywordTable] limit 20”,但是木有执行之。
怎么没有执行啦?不是给cmd.CommandText啦么。而且重点就是我不知道怎么获得表数据,我就找到了GetSchemaTable()这个啊
@W宁宁:
cmd.ExecuteReader();
这不就是一个?
还有很多其他方法吧,直接获得DataTable也是可以的吧。
@随心所欲: 对,没重点就是想要直接获得DataTable
@W宁宁:
while (dr.Read())
{
string content = dr.GetString(7);
}
您这样一条一条的循环读取不久完了吗?或者直接自己创建一个DataTable,然后一条一条赋予到DataTable里面也不费事啊,三五句代码的事情。
@随心所欲: 哈哈,被你拣到了哦,用SQLiteDataAdapter 就解决啦,谢谢啦
@W宁宁:
你理解了ADO.Net的结构,就不怕这些小问题了。
@W宁宁: SQLiteDataAdapter.....汗止不住的流
lz是实现什么功能?把查到的结果绑到datagrid?
“这个第一列是表的字段啊,不应该是这样的,想要把查询出来的表直接绑定到Grid中呢”
第一列就是表的字段啊,第二列是字段编号也就是列号,第三列是长度,都是字段的信息,没有问题
好吧,按你这么说的话是表的信息,但是我要的是表的内容,这个表所存储的数据
@W宁宁:
dataT = drs.GetSchemaTable();你已经到得KeywordTable这个表的所有内容了,都存在
dataT 这个datatable中,你只需要把它作为数据源绑到datagrid上就行了。另外,你要看表的内容就在ds可视化工具“表”的下拉菜单中切换,SchemaTable是概要图表
@WuRang: “表”下拉中并没有其他的选择啊,我之前有直接绑定到DataGrid上的,但是显示的绑定后的数据和我在问题中截图的表一样~不是数据啊
@W宁宁:
看到问题了,
cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly);
dataT = drs.GetSchemaTable();
这两句read到的是Schema,不是内容。可以自己写一个方法
public DataTable ExecuteDataTable(string sql, SQLiteParameter[] parameters) { using (SQLiteConnection connection = new SQLiteConnection(connectionString)) { using (SQLiteCommand command = new SQLiteCommand(sql, connection)) { if (parameters != null) { command.Parameters.AddRange(parameters); } SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); DataTable data = new DataTable(); adapter.Fill(data); return data;
@WuRang: 谢谢大侠,刚刚结贴没看到最后发的这个!对不起啦
你的代码是没错的。你在可视化工具中看到的数据, 是因为你选择的表是SchemaTable。注意看你的截图的左上角,那里可以切换表显示。
还有就是你的DataReader为何要那样用?你要读数据,直接用DataAdapter直接将数据Fill到DataTable即可。
但是不可以选择的啊,
dataT = drs.GetSchemaTable();
这个就是获得SchemaTable表吧,我刚刚找了下,也没有找到直接获取表的方法啊
@W宁宁: 你是获取数据啊~Command的执行命令,获取数据要用DataAdapter。
如果执意要Command->DataReader,那么读数据也应该是while(reader.Read()){获取数据...}
GetSchemaTable()本来就是获取表的描述信息的,你直接cmd.ExecuteDataTable()不就可以了
没有这个的
看的直迷糊,啥时候查表也这么麻烦了,帮顶~
哈哈哈是吧,只要把它解决了就都不是问题了(小吹一下)