OleDbConnection.GetOleDbSchemaTable

在 .NET Framework 2.0 中,要得到表结构的定义,不能简单的用 DataTable.Columns[col].DataType 来获取,有很多信息是无法得到的,要用OleDbConnection.GetOleDbSchemaTable 这个方法。

在 MSDN 中是这么定义的:

public DataTable GetOleDbSchemaTable(
    Guid schema,
    Object[] restrictions
)

参数:
schema
类型:System.Guid
OleDbSchemaGuid 的值之一,它指定要返回的架构表。

restrictions
类型:array[]()[]
限制值的 Object 数组。这些值按照限制列的顺序来应用。即,第一个限制值应用于第一个限制列,第二个限制值应用于第二个限制列,依此类推。

返回值
类型:System.Data..::.DataTable
一个包含所请求的架构信息的 DataTable。

我要得到一个表的结构,可以这样:

DataTable dtSchema = db.GetOleDbSchemaTable(
    OleDbSchemaGuid.Columns,
    new object[] { null, null, TableName, null });

返回的 dtSchema 的列分别是:

0: TABLE_CATALOG
1: TABLE_SCHEMA
2: TABLE_NAME
3: COLUMN_NAME
4: COLUMN_GUID
5: COLUMN_PROPID
6: ORDINAL_POSITION
7: ORDINAL_HASDEFAULT
8: ORDINAL_DEFAULT
9: ORDINAL_FLAGS
10: IS_NULLABLE
11: DATA_TYPE
12: TYPE_GUID
13: CHARACTER_MAXIMUM_LENGTH
14: CHARACTER_OCTET_LENGTH
15: NUMERIC_PRECISION
16: NUMERIC_SCALE
17: DATETIME_PRECISION
18: CHARACTER_SET_CATALOG
19: CHARACTER_SET_SCHEMA
20: CHARACTER_SET_NAME
21: COLLATION_CATALOG
22: COLLATION_SCHEMA
23: COLLATION_NAME
24: DOMAIN_CATALOG
25: DOMAIN_SCHEMA
26: DOMAIN_NAME
27: DOMAIN_DESCRIPTION

C# 中子窗体最大化的问题

在 C# 中做 MDI 程序的时候,子窗体经常是被定义成最大化状态,在子窗体的属性里,把 WindowState 设置成 Maximized,然后在主窗体中用 frmChild.Show() 来显示,代码如下:

1
2
3
frmChild fc = new frmChild();
fc.MdiParent = this;
fc.Show();

运行的时候,会发现一个问题,子窗口并没有真正的最大化,而是窗口外框是最大化的,里面的控件还都是原来的位置,没有达到最大化的效果。
解决办法:在子窗体属性里把 WindowState 设置成 Normal,在代码中去设置这个属性值就可以了,代码如下:

1
2
3
4
frmChild fc = new frmChild();
fc.MdiParent = this;
fc.WindowState = FormWindowState.Maximized;
fc.Show();

这样,运行就正常了。

在 VS2005 和 VS2008 中都是这样。