【发布时间】:2016-10-14 19:16:50
【问题描述】:
我正在尝试从 C#(.NET 4.5、SQL Server 2014)中的数据库架构中读取信息。在我提到将DataAdapter.MissingSchemaAction 设置为MissingSchemaAction.AddWithKey 之前,我在处理MaxLength/ColumnLength 等某些字段时遇到了问题。不幸的是,即使对于在 SQL Server 列属性的“默认值或绑定”中设置了默认值的列,DefaultValue 字段仍然是空白的。
SqlDataAdapter dbadapter = new SqlDataAdapter(SELECT_STRING, CONN_STRING);
dbadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
DataTable tbl = new DataTable();
dbadapter.Fill(tbl);
// I actually looped through all rows/columns, but the net effect here is...
tbl.Columns[0].DefaultValue; // blank for all columns
// Also tried accessing the schema table available through DataReader
IDataReader reader = tbl.CreateDataReader();
DataTable schemaTbl = reader.GetSchemaTable();
/*
* There are different schema fields here than in DataColumn,
* but DefaultValue still blank. I looped through them all but...
*/
schemaTbl.Rows[0]["DefaultValue"]; // blank for all columns
如何使用 .NET 从表中的列中读取默认值(最好不借助查询 SQL 的 sys.* 表)。
澄清
创建或更改表时,如果未提供列,则可以设置列的默认值。我正在尝试获取默认值。
例子:
CREATE TABLE Person
(
Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
HomeState varchar(2) DEFAULT 'NY'
)
现在如果我说,INSERT INTO Person (Id, LastName, FirstName) VALUES (1, 'Doe', 'John') HomeState 将是“NY”,即使我没有设置它。
【问题讨论】:
-
只是确认您是否尝试获取数据库表中设置的列的默认值?像位数据类型它是 (0) ?
-
@Searching 创建或更改表时,您可以为列设置默认值。例如,如果在 INSERT 语句中未指定任何值,我可以说如果创建了新行,则始终将日期时间字段设置为“1900-01-01”。用示例更新问题。
-
正是我想知道的,您似乎已经找到了答案。
标签: c# database-schema datacolumn