如何从Sql表中检索DataColumn.DefaultValue?
有没有办法使用ado.net从Sql数据库中确定列的默认值?
我尝试使用SqlDataAdapter
的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); }
当我检查DataTable
的DataColumns
时,我可以确定列是否是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.COLUMNS
的COLUMN_DEFAULT
列不为您提供实际的默认值,但是SQL Server和类似代码的字符串表示将执行以生成默认值。 请参阅http://msdn.microsoft.com/en-us/library/ms188348.aspx 。
话虽如此,可以从这样的表达式中轻松推导出简单的常量值。