簡體   English   中英

SELECT SQL語句在VB.net控制台應用程序中無法正常工作

[英]SELECT SQL Statement not working as expected in VB.net Console application

我知道有類似的帖子,但我似乎無法找到任何有用的。

我還是VB的新手,這顯然讓我很生氣。

我要做的是運行SQL SELECT並將結果通過電子郵件發送給需要它的人。

當我運行它時,我收到'ELSE'電子郵件,其中說明沒有任何內容,但是在SQL Server Management Studio中運行查詢確實會顯示結果。

這是我有的:

Public Sub Main()
    Dim connection As New SqlConnection(My.Settings.connectionString)
    connection.Open()
    Dim sqlCommand As SqlCommand
    log(" Processing - Searching SQL Database for Held ONLN Jobs ")

 Dim sqlQ1 As String = "Select [JobID] FROM [cemail].[dbo].[JobTb] " +
               "WHERE ApplicationID = 7 AND Status = 10 ORDER BY [JobID]"

    sqlCommand1 = New SqlCommand(sqlQ1, connection)
    Dim result = sqlCommand1.ExecuteScalar()

   Dim sqlQ2 As String = "Select [JobID],[JobNumber],[ApplicationID],[GeneratedDate]," +
                "[ReceivedDate],[CompletedDate],[Status],[ExpectedRecordNumber]," +
                "[ReceivedRecordNumber],[BadRecordNumber] " +
                "FROM [cemail].[dbo].[JobTb] " +
                "WHERE ApplicationID = 7 AND Status = 10"
    sqlCommand2 = New SqlCommand(sqlQ2, connection)
    Dim reader As SqlDataReader = sqlCommand2.ExecuteReader()
    While reader.Read()
        Dim jobID = reader(0)
        Dim jobNumber = reader(1)
        Dim appID = reader(2)
    End While

    If (result > 0) Then

 SendEmail(My.Settings.emailuser1, "Current Held Jobs", "Hello," & jobID & "Kind Ragards" )
    Else

        SendEmail(My.Settings.emailuser1, "No Jobs on Hold", "There are no Jobs Currently on Hold" )


    End If


    connection.Close()

    log("Finished")
End Sub

任何有關這方面的幫助將不勝感激。 提前致謝。

傳遞Select語句時,不應調用ExecuteNonQuery
從MSDN的評論開始

對於UPDATE,INSERT和DELETE語句,返回值是受命令影響的行數。 .........對於所有其他類型的語句,返回值為-1 .......

您可以通過這種方式更改語句以簡化查詢

Dim sqlQ As String = "Select count(*) as recFound FROM [cemail].[dbo].[JobTb] " + 
                     "WHERE ApplicationID = 7 AND Status = 10"

sqlCommand = New SqlCommand(sqlQ, connection)
Dim result = sqlCommand.ExecuteScalar()

此外,在上面的代碼中,不需要使用事務。

編輯查看您的評論我還將顯示使用SqlDataReader從數據庫讀回值的部分

Dim sqlQ As String = "Select [JobID],[JobNumber],[ApplicationID],[GeneratedDate]," +
                    "[ReceivedDate],[CompletedDate],[Status],[ExpectedRecordNumber]," + 
                    "[ReceivedRecordNumber],[BadRecordNumber] " + 
                    "FROM [cemail].[dbo].[JobTb] " + 
                    "WHERE ApplicationID = 7 AND Status = 10"

sqlCommand = New SqlCommand(sqlQ, connection)
Dim reader As SqlDataReader = sqlCommand.ExecuteReader()
While reader.Read()
     Dim jobID = reader(0)
     Dim jobNumber = reader(1)
     Dim appID = reader(2)
     ..... 'and so on'
End While 

我認為問題是你想要執行一個查詢但是正在使用ExecuteNonQuery() 嘗試使用SqlDataAdapter,如下所示:

Public Function SelectSqlSrvRows(dataSet As DataSet, connection As String, query As String) As DataSet
    Dim conn As New SqlConnection(connection)
    Dim adapter As New SqlDataAdapter()
    adapter.SelectCommand = new SqlCommand(query, conn)
    adapter.Fill(dataset)
    Return dataset
End Function

暫無
暫無

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

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