C#数据库工具开发(十)

问题(07/24-07/25)

1. 如何实现一个页面关闭触发上级页面的响应?

问题背景:我有一个页面显示某个数据库中所有表名和表结构,在此页面可以打开另一个修改或创建新表的页面,完成后,我想立即在显示页面刷新,让刚刚修改或生成的表也能出现在列表中。

解决方法:由于修改添加页面是在显示页面生成的:

1
2
formxml = new FormXMLExecute("*Oracle*", filePath.Text);
formxml.Show();

我们只需要在创建formxml时添加一个页面关闭事件即可:

1
2
3
formxml = new FormXMLExecute("*Oracle*", filePath.Text);
formxml.FormClosing += new FormClosingEventHandler(this.FromXMLExecute_FormClosing);
formxml.Show();

在页面关闭事件中:

1
2
3
4
private void FromXMLExecute_FormClosing(object sender, FormClosingEventArgs e)
{
//Do your stuff here.
}

实现想要完成的功能(如刷新页面等)

2. DataGridViewCheckBox的响应事件

问题背景:想要实现点击DataGridViewCheckBox后,刷新页面
解决方法:这个的即时响应和DataGridViewTextBox或DataGridViewComboBox相比简单很多,能直接用现有事件

1
2
3
4
5
6
7
private void dataXML_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 3 && e.RowIndex != -1)
{
//Do your stuff here.
}
}

唯一需要注意的和之前提到的一样:用单元格EditedFormattedValue属性而不是Value属性。

3. 如何查询某个表中所有设置了索引的字段?

Oracle:

1
select a.column_name from all_ind_columns a, all_indexes b where a.index_name=b.index_name and a.table_name = upper('"+tableName+"') order by a.table_name";

SQLServer:

1
"USE " + DBName+" ;SELECT colname=d.name FROM   sysindexes  a  JOIN   sysindexkeys   b   ON   a.id=b.id   AND   a.indid=b.indid  JOIN   sysobjects   c   ON   b.id=c.id  JOIN   syscolumns   d   ON   b.id=d.id   AND   b.colid=d.colid  WHERE   a.indid   NOT IN(0,255)  AND   c.name='"+tableName+"'";

3.1 更好的查询表中所有索引以及对应列名的sql查询语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use GMP_BF;
SELECT
tab.name AS [表名],
idx.name AS [索引名称],
col.name AS [列名]
FROM
sys.indexes idx
JOIN sys.index_columns idxCol
ON (idx.object_id = idxCol.object_id
AND idx.index_id = idxCol.index_id
)
JOIN sys.tables tab
ON (idx.object_id = tab.object_id)
JOIN sys.columns col
ON (idx.object_id = col.object_id
AND idxCol.column_id = col.column_id)
WHERE tab.name='TEST2';