簡體   English   中英

SQL查詢未在VB.NET中運行

[英]SQL query is not running IN VB.NET

我在VB.NET中較新,並且正在嘗試在VB.NET中執行SQL查詢,但未在輸出中顯示任何值。 你能幫我找到我要去哪里錯嗎?

Dim sConnectionString As String _
    = "User ID=XXX ;Password=XXX;Initial Catalog=gemXXX;Data Source=SCRBAMSDKBXXXXXX"

    Dim objConn As New SqlConnection(sConnectionString)
    objConn.Open()

    Dim sw ,readerObj
    Dim sSQL As String = "select top 1  " & sw & " = e.import  from tblrelcoms r , [beant].[dbo].tblequipments e where r.IDEquipment = e.IDEquipment"
    Using readerObj As SqlClient.SqlDataReader = cmdObj.ExecuteReader
    Dim objCmd As New SqlCommand(sSQL, objConn)
    objCmd.ExecuteNonQuery()

    TextBox1.Text = sw.ToString()

您遇到的問題是,您不能僅將變量連接到SQL中,並期望在執行SQL后對其進行更新。

ExecuteScalar可能是實現所需目標的最簡單方法:

Dim sConnectionString As String _
    = "User ID=XXX ;Password=XXX;Initial Catalog=gemXXX;Data Source=SCRBAMSDKBXXXXXX"

Dim sSQL as string = "SELECT TOP 1 e.import  " _
                    "FROM   tblrelcoms r " & _
                    "       INNER JOIN [beant].[dbo].tblequipments e " & _
                    "           ON r.IDEquipment = e.IDEquipment " & _
                    "ORDER BY e.Import;"

Using connection = new SqlConnection(sConnectionString)
    Using command = New SqlCommand(sSQL, connection)

        connection.Open()
        TextBox1.Text = command.ExecuteScalar().ToString()

    End Using
End Using

雖然如果您需要多個列,那么可以使用數據讀取器:

Dim sConnectionString As String _
    = "User ID=XXX ;Password=XXX;Initial Catalog=gemXXX;Data Source=SCRBAMSDKBXXXXXX"

Dim sSQL as string = "SELECT TOP 1 e.import  " _
                    "FROM   tblrelcoms r " & _
                    "       INNER JOIN [beant].[dbo].tblequipments e " & _
                    "           ON r.IDEquipment = e.IDEquipment " & _
                    "ORDER BY e.Import;"

Using connection = new SqlConnection(sConnectionString)
    Using command = New SqlCommand(sSQL, connection)

        connection.Open()
        Using reader = command.ExecuteReader()

            If reader.Read()
                TextBox1.Text = reader.GetString(0)
            End If
        End Using

    End Using
End Using

我也做了其他一些更改。

  1. 添加了Using塊,以確保正確處理IDisposable對象。
  2. 顧名思義,您使用的語法已過期24年,將sql聯接語法從ANSI 89隱式聯接更新為ANSI 92顯式聯接。 有很多原因可以開始使用新語法,本文對此進行了詳細介紹: 不良習慣:使用舊式JOIN
  3. 在您的sql中添加了ORDER BY子句。 沒有排序的TOP 1名將給您不確定的結果(除非您只有一條記錄,在這種情況下,前1名是多余的)

一個更復雜的解決方案是使用輸出參數,該參數將起作用,並且看起來更符合您最初想要實現的目標,但是對於這種情況而言,這是過大的(我認為):

Dim sConnectionString As String _
    = "User ID=XXX ;Password=XXX;Initial Catalog=gemXXX;Data Source=SCRBAMSDKBXXXXXX"

Dim sSQL as string = "SELECT TOP 1 @Output = e.import  " _
                    "FROM   tblrelcoms r " & _
                    "       INNER JOIN [beant].[dbo].tblequipments e " & _
                    "           ON r.IDEquipment = e.IDEquipment " & _
                    "ORDER BY e.Import;"

Using connection = new SqlConnection(sConnectionString)
    Using command = New SqlCommand(sSQL, connection)

        connection.Open()
        Dim p As SqlParameter = command.Parameters.Add("@Output", SqlDbType.VarChar, 255)
        p.Direction = ParameterDirection.InputOutput

        command.ExecuteNonQuery();

        TextBox1.Text = p.Value.ToString()

    End Using
End Using

*請原諒任何語法錯誤,我已經多年沒有使用VB.Net了,下面可能有一些c#怪癖,例如我不記得您是否不必對無參數方法使用括號,或者如果您做不到...希望有足夠的基本結構來入門

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM