有沒有一種方法可以使用ado.net從Sql數據庫中確定列的默認值?如何從Sql表中檢索DataColumn.DefaultValue?
我嘗試使用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
?
我認爲這意味着一個SQL Server(MSSQL),2005(?)或更高版本的服務器,對不對? – mjv
不,任何支持INFORMATION_SCHEMA的數據庫都應該被支持。這不僅僅是SQL Server--還有其他一些人也支持這一點。這是使用INFORMATION_SCHEMA而不是SQL Server特定的「sys。*」或「sysobjects」目錄視圖的最大好處。 –
據我所知,至少MySQL,PostgreSQL和一定程度的Oracle支持INFORMATION_SCHEMA(不清楚IBM DB2) –