如何从Sql表中检索DataColumn.DefaultValue?

时间:2009-10-16 20:36:42

标签: c# .net ado.net

有没有办法使用ado.net从Sql数据库中确定列的defaultvalue?

我尝试使用SqlDataAdapter的{​​{1}}方法:

FillSchema

当我检查 using (SqlDataAdapter adapter = new SqlDataAdapter()) { adapter.SelectCommand = myConnection.CreateCommand(); adapter.SelectCommand.CommandType = CommandType.Text; adapter.SelectCommand.CommandText = "SELECT * FROM myTable"; DataTable table = new DataTable(); adapter.Fill(table); adapter.FillSchema(table, SchemaType.Mapped); } 中的DataColumns时,我可以确定列是否为DataTable,并且可以使用AutoIncrement属性确定它是否允许空值。但是,AllowDBNull(对于我知道的列具有默认值)始终为DefaultValue

我考虑过:

null

但架构中不包含DataTable schemaTable = null; using (SqlDataReader reader = adapter.SelectCommand.ExecuteReader(CommandBehavior.SchemaOnly)) { schemaTable = reader.GetSchemaTable(); reader.Close(); }

那么......我怎样才能获得专栏DefaultValue

2 个答案:

答案 0 :(得分:4)

使用此查询询问INFORMATION_SCHEMA您要查找的信息:

SELECT 
   TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT
FROM 
   INFORMATION_SCHEMA.COLUMNS
WHERE 
   TABLE_NAME = 'your table name' AND
   COLUMN_NAME = 'your column name'

马克

答案 1 :(得分:2)

不是真的。这是因为可以在插入记录时确定默认值(如GETDATE()NEW_ID())。所以价值无法提前确定。

COLUMN_DEFAULT的{​​{1}}列没有给出实际的默认值,但SQL Server和类似代码的字符串表示将执行以生成默认值。请参阅http://msdn.microsoft.com/en-us/library/ms188348.aspx

话虽如此,简单的常数值很容易从这样的表达式中推断出来。