-2

我有一个类似的数据表:

id msg 1 谢谢.. 2 请... 3 请插入.. 4 请停止

我需要根据数据表中的特定 id 获取一个味精,这就是我填充数据表的方式:

msgTable = selectMsg()
MsgBox(i need to get the msg here)

   Public Function selectMsg() As DataTable
    Dim command As SqlCommand = New SqlCommand("selectMsg", cn)
    command.CommandType = CommandType.StoredProcedure
    Dim da As New SqlDataAdapter(command)
    'If dt.Rows.Count <> 0 Then
    '    dt.Rows.Clear()
    'End If
    Try
        da.Fill(msgDS, "N_AI_HOME_CARE")
        msgDT = msgDS.Tables(0)
    Catch ex As Exception
        logFile("SP selectMsg ---" + ex.Message)
    End Try
    Return msgDT
End Function

任何建议将不胜感激!

4

2 回答 2

1

假设您的存储过程返回消息的整个数据表(这是一个非常糟糕的举动,因为如果表很大,您可能会遇到性能和网络问题),那么您需要将带有过滤器表达式的 Select 方法应用于返回的数据表

msgTable = selectMsg()
Dim rows() = msgTable.Select("ID = " & idOfMessage)
if rows.Length > 0 then
    MsgBox(row(0)(1).ToString()) ' read the first row, second column of the table'
End If

但我认为你应该使用更正确的方法,使用一个简单的 ExecuteScalar,它不返回整个数据表,而只返回查询的第一行和第一列

Public Function selectMsg(idOfMessage as Integer) As String
    Dim command As SqlCommand = New SqlCommand("SELECT msg from tableName where ID = @id", cn)
    command.Parameters.AddWithValue("@id", idOfMessage)
    Dim result = command.ExecuteScalar()
    if string.IsNullOrEmpty(result) Then
        result = "No message found"
    End If
    return result
End Function
于 2013-09-02T09:50:19.130 回答
0

好吧,我刚刚发现你用

MsgBox(msgTable.Rows(0)(1).ToString()) 

没有任何选择方法:)

于 2013-09-02T10:26:49.033 回答