2011-11-24 89 views
1

我想使用C#檢索表模式信息。使用C#檢索表模式信息

我使用sp_help <table_name>查詢來檢索它,這在我在查詢窗口中執行它時效果很好,但無法從C#中檢索它。只是我想找回這是必要的兩個表,如名稱,數據類型,大小,值isPrimary,密鑰等

我不得不寫下之間的映射表中的所有信息,下面的代碼

SqlCommand cmd = sourceCon.CreateCommand(); 
cmd.CommandText = string.Format("sp_help '{0}'", cmbSourceTable.SelectedItem.ToString()); //cmd.CommandType = CommandType.StoredProcedure; 
sourceDataTable = new DataTable(); 
SqlDataReader dr = cmd.ExecuteReader(); 
sourceDataTable.Load(dr); 
dr.Close(); 

它將回報關於表的信息,當它被創建或不是

+0

請顯示不起作用的代碼。 – jeroenh

+0

我寫下了以下代碼 SqlCommand cmd = sourceCon.CreateCommand(); cmd.CommandText = string.Format(「sp_help'{0}'」,cmbSourceTable.SelectedItem.ToString()); //cmd.CommandType = CommandType.StoredProcedure; sourceDataTable = new DataTable(); SqlDataReader dr = cmd.ExecuteReader(); sourceDataTable.Load(dr); dr.Close(); 它只會返回關於表格的信息,當它被創建或沒有時 – Awadhendra

+0

Awadhendra - 您可以編輯問題以澄清事情 - 我已將您的評論中的代碼複製到您的問題中... – Murph

回答

1

我有一個簡單的方法來獲取表的模式。 只需創建與任何提供程序(如SqlConnection對象)的連接即可。 爲選擇查詢創建一個命令對象(只選擇最前面的1條記錄,因爲您只需要表的模式) 執行那個返回DataReader對象的查詢。 每個DataReader對象都有一個名爲GetTableSchema()的方法,該方法返回具有精細表格模式的DataTable對象。

通過這種方式,您可以輕鬆地獲取任何表格的模式。

在這裏,我將提供一個簡單的代碼,這

SqlConnection con=new SqlConnection("connString"); con.Open(); SqlCommand cmd= new SqlCommand("select top(1) * from Person.Address",con); DataTable table = cmd.ExecuteReader().GetTableSchema();

現在這個表對象有Person.Address表的架構信息。

+0

你實際上可以使用'TOP 0'而不返回任何實際的行。 –

0

sp_help不能在你的代碼中工作?也許你需要包含一個execute語句:exec sp_help。或者應用程序在沒有sp_help權限的帳戶下運行。

1

我覺得sp_help返回多個結果集,所以你需要使用NextResult,還有更多的細節在這裏 - http://support.microsoft.com/kb/311274(這個例子並不是sp_help具體但它應該給你的總體思路)

3

而不是使用的sp_help,你可以嘗試以下選項:

1)使用INFORMATION_SCHEMA.COLUMNS觀點:

SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTable' 

2)查詢SYS.COLUMNS

SELECT c.*, t.name 
FROM sys.columns c 
    JOIN sys.types t ON c.user_type_id = t.user_type_id 
WHERE c.object_id = OBJECT_ID('YourTable') 

這些只是2個選項,將retu一個結果集。 INFORMATION_SCHEMA.COLUMNS不會告訴你(例如)一列是否是一個IDENTITY列,而sys.columns路徑在哪裏。有更多的信息可以從目錄視圖中獲得,只取決於您需要的其他信息。這是MSDN reference

1

另外,您可以使用SqlConnection中的GetSchema方法。 http://msdn.microsoft.com/en-us/library/ms136367.aspx

像這樣:

var tableSchema = con.GetSchema(SqlClientMetaDataCollectionNames.Tables, new string[] { null, null, "[tableName]" }); 

字符串數組是一個「過濾器」,在這裏你可以找到你可以篩選列:http://msdn.microsoft.com/en-us/library/ms254969.aspx

對於其他數據庫服務器和更多的信息: http://msdn.microsoft.com/en-us/library/kcax58fh.aspx