我需要能夠從DbConnection.GetSchema()返回的DataTable中確定SQL Server表中的特定列是否爲identity/auto-increment或不。我不能直接查詢系統表。如果我通過ODBC連接到SQL Server,奇怪的是,這樣的列的返回數據類型返回爲「int identity」(或「bigint identity」等),但如果我使用本地SQL Server驅動程序,那麼似乎在「int」列和「int identity」列之間沒有區別。有其他的方式可以推斷出這些信息嗎?如何在C#中確定SQL Server數據庫列是否爲自動增量?
2
A
回答
4
DataTable
有Columns
財產和DataColumn
有a property表明自動遞增:
bool isAutoIncrement = dataTable.Columns[iCol].AutoIncrement
+0
他需要從`GetSchema()`GetSchema()返回一個`DataTable`關於模式的信息*,而不是模式本身。 – 2011-01-29 02:01:45
0
我遇到了相同的。據我發現here「根據您使用的數據庫類型,自動增量列的實現方式不同,它不通過GetOleDbSchema公開。」
我沒有找到任何其他方式,然後「kelloti」提到。所以目前我對這個解決方案很好,因爲此刻我需要知道列是否是AutoIncrement,我已經在內存中擁有表,所以我不需要再次查詢數據庫。
(我願意把我的意見爲意見,但我不能評論,所以我希望我不會讓它凌亂太多...)
3
的GetSchema()
功能將不會返回你想要的信息。也不會檢查DataTable模式屬性。你必須去一個較低的級別,這將取決於DBMS和可能的版本。
下面的成員檢索具有標識列的所有表,然後查找與作爲參數傳遞的特定表匹配。該代碼可以修改爲返回所有表或者查詢優化以僅查找感興趣的表。
// see: https://stackoverflow.com/questions/87747/how-do-you-determine-what-sql-tables-have-an-identity-column-programatically
private static string GetIdentityColumnName(SqlConnection sqlConnection, Tuple<string, string> table)
{
string columnName = string.Empty;
const string commandString =
"select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS "
+ "where TABLE_SCHEMA = 'dbo' and COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1 "
+ "order by TABLE_NAME";
DataSet dataSet = new DataSet();
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = new SqlCommand(commandString, sqlConnection);
sqlDataAdapter.Fill(dataSet);
if (dataSet.Tables.Count > 0 && dataSet.Tables[0].Rows.Count > 0)
{
foreach (DataRow row in dataSet.Tables[0].Rows)
{
// compare name first
if (string.Compare(table.Item2, row[1] as string, true) == 0)
{
// if the schema as specified, we need to match it, too
if (string.IsNullOrWhiteSpace(table.Item1) || string.Compare(table.Item1, row[0] as string) == 0)
{
columnName = row[2] as string;
break;
}
}
}
}
return columnName;
}
相關問題
- 1. 如何確定SQL Server中是否存在數據庫角色?
- 2. 如何在SQL Server中爲自動增量列指定特定值?
- 3. SQL Server數據庫中的主鍵自動增量
- 4. 在SQL Server CE中創建自動增量列的查詢C#
- 5. 如何自動增量更新在SQL Server表中的列
- 6. 如何在SQL Server自動增量中有兩列?
- 7. 如何減少SQL數據庫中的自動增量數?
- 8. 插入一個自動增量鍵到SQL Server Compact數據庫
- 9. SQL Server數據庫表自動增量字段的設置值
- 10. SQL Server自動增量
- 11. SQL數據庫中的自動增量列
- 12. 從C中確定SQL Server數據庫列的默認值#
- 13. SQL Server 2008自動增長設置爲重載數據庫
- 14. 爲mvc中的sql數據庫重置自動增量4
- 15. 如何確定SQL Server 2012中是否存在序列?
- 16. 如何重置所有數據後在SQL Server中的自動增量刪除
- 17. SQL Server數據庫中的ID自動增加和更新
- 18. 確定SQL Server數據庫是否恢復
- 19. 表(數據庫)中的自動增量
- 20. 如何確定是否存在SQL服務器或數據庫
- 21. SQL Server中的否定數據庫ID
- 22. SQL Server中是否有標量數據庫變量?
- 23. Sql Server CE - 暫時禁用特定列上的自動增量
- 24. 在Sql Server中將退出列轉換爲第二自動增量列
- 25. 在SQL Server 2005中將外鍵設爲自動增量
- 26. 在sqlite中是否有自動增量?
- 27. 確定SQL Server表是否爲只讀
- 28. 如何在Java derby中自動增加數據庫列?
- 29. 由PHP在SQL數據庫中未自動分配的自動增量ID
- 30. 數據庫方案,自動增量
它看起來不像GetSchema()集合中可用的那條信息。爲什麼你不能查詢系統目錄視圖?那些肯定會保存這些信息! – 2011-01-29 07:54:09
我需要一個獨立於數據庫的方式。看起來,查詢每個單獨的表並檢查DatabaseReader.GetSchemaTable()的輸出是唯一可行的方法。 – Dan 2011-01-31 15:56:02