2

同じ行の別のフィールドの値に基づいて、VB のデータテーブルから特定のフィールドを選択したいと考えています。

SQL では、次のクエリを記述することで簡単に実行できます。

select error_message from table_errors where error_case="condition"

SQL テーブルが VB のデータテーブルに入力されている場合、これを行うにはどうすればよいですか? item("error_Case") フィールドに基づいてデータテーブルで item("error_message") を選択するにはどうすればよいですか?

どんな助けでもいただければ幸いです

4

2 に答える 2

3

使用できますLinq-To-DataSet

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

1 つの列だけが必要な場合 (もちろん、1 つのステップでも機能します):

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 

単一の行を使用するだけであると予想される場合は、FirstまたはSingle(複数の行がある場合は例外をスローします):

Dim error As String = errorMessages.First()

Firstシーケンスが空の場合は例外をスローするため、次を使用できますFirstOrDefault

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

すべて 1 行で (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()
于 2013-09-23T14:21:19.253 に答える
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()
于 2013-09-23T14:45:11.437 に答える