2013-09-23 72 views
2

我想根據同一行中另一個字段的值從VB中的數據表中選擇某個字段。從VB.net中的數據表中選擇條件

select error_message from table_errors where error_case="condition" 

我怎麼做,如果我有我的SQL表中的VB一個DataTable填充:

在SQL中,它會很容易地通過編寫此查詢呢? 如何根據項目(「error_Case」)字段選擇數據表中的項目(「error_message」)?

任何幫助,將不勝感激

回答

3

您可以使用Linq-To-DataSet

Dim matchingRows As IEnumerable(Of DataRow) = 
    From row In table 
    Where row.Field(Of String)("error_case") = "condition" 

如果你只是想一列(當然這工作也一步到位):

Dim errorMessages As IEnumerable(Of String) = 
    From row In matchingRows 
    Select row.Field(Of String)("error_message") 

For Each error In errorMessages 
    Console.WriteLine(error) 
Next 

如果您希望它只是一行使用FirstSingle(如果存在多行,則會引發異常):

Dim error As String = errorMessages.First() 

由於First拋出一個異常,如果序列是空的,你可以使用FirstOrDefault

Dim error As String = errorMessages.FirstOrDefault() ' is null/Nothing in case of an empty sequence 

所有在同一行(注意,這兩個LINQ和DataTable.Select需要使用循環):

Dim ErrMessage As String = errorTable.AsEnumerable(). 
    Where(Function(r) r.Field(Of String)("Error_Case") = TextCase.Text). 
    Select(Function(r) r.Field(Of String)("Error_Message")). 
    FirstOrDefault() 
+0

我其實試圖避免循環。我在代碼中需要多次,我正在尋找最短的方法來完成它。試過這個http://urlpaste.com/PlKudP5a但它沒有工作。 – HelpASisterOut

+0

@HelpASisterOut:您認爲'DataTable.Select'不需要循環嗎?當然,它也必須循環所有的行,裏面沒有魔法。 –

0

這裏是工作人員版本的粗略代碼

Dim connString As String = "select error_message from table_errors where error_case='condition'" 
    Dim conn As SqlClient.SqlConnection = New SqlClient.SqlConnection(connString) 
    conn.Open() 
    Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(connString, conn) 
    Dim dTable As DataTable = New DataTable() 
    Dim dAdapter As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(cmd) 
    dAdapter.Fill(dTable) 
    conn.Close() 
    Dim text As String 
    Dim dReader As DataTableReader = dTable.CreateDataReader() 
    While dReader.Read() 
     text = dReader.GetValue(0) 
    End While 
    dReader.Close() 
+0

我試圖避免每次都將它鏈接到數據庫。我想加載一次,並能夠根據不同的條件通過行。試過這個http://urlpaste.com/PlKudP5a但它沒有工作。 – HelpASisterOut

+0

爲select命令使用參數,這將更容易更改過濾器值(如果這是您需要的),或者從命令文本中一起排除條件,並將值與DataTable字段一起存儲在DataTable中,但是您需要在閱讀器中遍歷它並在error_case列上設置條件。 – Catalin