2010-06-16 48 views
1

堆棧溢出C#表適配器實際返回什麼?

我正在處理一個操作Windows窗體應用程序中的SQL表的應用程序。到目前爲止,我只使用預生成的Fill查詢,以及自制的更新和刪除查詢(它們什麼都不返回)。

我感興趣的是存儲單個列('nchar(15)'名稱)中單個值的值,儘管我已經很容易地編寫了SQL代碼以將該值返回給應用程序,但我沒有想法它將返回作爲

SELECT [Contact First Name] FROM ContactSkillSet 
WHERE [Contact ID] = @CurrentID 

結果可以直接存儲爲字符串嗎?我需要投射嗎?調用toString方法?

謝謝!

編輯:有趣的是,以下工作:

String firstName = this.contactSkillSetTableAdapter.GrabFirstName(userKey); 

在Visual Studio數據嚮導的樂趣,我想。

回答

2

TableAdapter用於填充DataTable。你的示例查詢的結果仍然是一個DataTable,但在一行中只有一列。你可以使用這個值。

var adapter = new SomeKindOfTableAdapter(); 
var dataTable = new DataTable(); 

adapter.Fill(dataTable); 

string contactFirstName = (string)dataTable.Rows[0][0]; 

還有其他的方式來獲得你的價值,而無需使用表適配器,但:

string query = @"SELECT [Contact First Name] 
       FROM ContactSkillSet 
       WHERE [Contact ID] = @Current"; 

string result; 

using(SqlConnection conn = new SqlConnection(connString)) 
{ 
    conn.Open(); 

    using(SqlCommand command = new SqlCommand(query, conn)) 
    { 
     result = (string)command.ExecuteScalar(); 
    } 
} 
+0

技術上你是對的,但我不知道如果我d鼓勵這種方法。 – R0MANARMY 2010-06-16 15:45:24

+0

@ R0MANARMY - 我同意。我增加了另一種我更喜歡的方法。 – 2010-06-16 15:46:50

+0

我已經有了表格適配器,因爲我也使用listview在窗體的其他地方顯示其他一些數據。一種方法或另一種方法不會被鼓勵是否有特定原因? (ala @ R0MANARMY) – 2010-06-16 15:50:59

0

返回單個值的SQL語句稱爲標量查詢。通常情況下,使用COUNT,MAX和MIN等彙總命令的語句屬於此類別。像你的例子一樣的其他語句也被認爲是標量。

基本上,你可以像對待任何其他查詢一樣對待它。檢查是否至少有一行,如果有,則將零行零列轉換爲適當的數據類型。如果您使用的是強類型數據集,則有一些功能可以使它更容易,但並不是必需的。

2

如果您計劃從您的查詢返回一個結果,你可以隨時使用在SqlCommandExecuteScalar方法,然後將其轉換爲字符串(見例如在第一個環節,它它轉換爲Int32,但同樣的原理爲字符串)。

相關問題