C#数据库工具开发(二)
问题(07/09-/07/11)
1. 数据库连接的开关,需要确认连接状态
为了避免之后执行sql查询等操作时反复连接数据库,我把数据库连接打开和关闭分成两个方法,在登录成功时打开连接,一直到程序结束前断开连接。同时为了避免多次打开同一连接,需要在打开前先确认连接状态。
2. 执行SQL语句是忽略关键字GO
问题发生在使用SQL语句进入特定数据库时。虽然在实际数据库中可以使用,但用C#连接的SQL server不识别GO。
解决方法也很简单,use 数据库名
之后不加GO,加;
就行。
更好的解决方法:处理批量sql语句
ps:记录一种查询服务器中所有数据库 和 两种查询特定数据库中所有表的SQL语句:
查数据库:Select Name FROM Master.dbo.SysDatabases ORDER BY Name;
查表法一:select name from sysobjects where xtype='U' order by name;
查表法二:SELECT table_name FROM information_schema.tables WHERE table_type = 'base table'
详细1
详细2
3. 存储sql执行语句结果的两种方式
法一用SqlDataAdapter
1 | DataSet ds = new DataSet(); |
法二用SqlDataReaderSqlDataReader sRead = cmd.ExecuteReader();
这两种方法的主要区别
4. 查询结果如何在主窗口正确显示?
最开始使用的ListView控件,通过添加listviewitem显示字段。具体方法如下:
1 | ListViewItem li = new ListViewItem(); |
这种方法问题在于,我想实现点击item(字段)显示对应的表名或表结构,但是很难为item添加事件。
解决措施:
换用DataGridView控件,好处在于:第一,这个控件本来就是为数据库显示服务的,获得DataSet之后用dataView.DataSource = ds.Tables[0].DefaultView;
就可以显示完整表单。第二,通过CurrentCellChanged事件就可以很方便实现点击显示对应表单的效果。