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

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

我尝试使用SqlDataAdapterFillSchema方法:

  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); } 

当我检查DataTableDataColumns时,我可以确定列是否是AutoIncrement ,并且可以使用AllowDBNull属性确定它是否允许空值。 但是, DefaultValue (对于我知道具有默认值的列)始终为null

我考虑过:

 DataTable schemaTable = null; using (SqlDataReader reader = adapter.SelectCommand.ExecuteReader(CommandBehavior.SchemaOnly)) { schemaTable = reader.GetSchemaTable(); reader.Close(); } 

但是DefaultValue不包含在架构中。

那么……我怎样才能得到一个专栏的DefaultValue

使用此查询来询问您要查找的信息的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' 

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

INFORMATION_SCHEMA.COLUMNSCOLUMN_DEFAULT列不为您提供实际的默认值,但是SQL Server和类似代码的字符串表示将执行以生成默认值。 请参阅http://msdn.microsoft.com/en-us/library/ms188348.aspx 。

话虽如此,可以从这样的表达式中轻松推导出简单的常量值。