有没有办法使用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
?
答案 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。
话虽如此,简单的常数值很容易从这样的表达式中推断出来。