簡體   English   中英

從VB.NET調用存儲過程時出現問題

[英]Problem calling a stored procedure from VB.NET

我對VB還是很陌生,我不確定為什么它不起作用,基本上我是想從Web代碼中運行存儲過程。 sp在SQL中運行得很好,我已經嘗試了幾次,所以我確定這不是問題。 我不想返回任何結果,我只想查看“ ok”語句(如果運行)和錯誤消息(如果沒有)。 我用於標簽(警告和確認)的代碼從同一頁的前面開始已被重用,驗證(valUpload)也是如此。 我相信解決方案很簡單...

Protected Sub RunValidation_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RunValidation.Click
    Try
        Dim bl As New BL.ORG
        Dim db As Database = DatabaseFactory.CreateDatabase("MyConnection")
        Dim dbCommand As DbCommand

        db = DatabaseFactory.CreateDatabase("MyConnection")
        dbCommand = db.GetStoredProcCommand("Company.dbo.uspMyStoredProcedure")
        dbCommand.CommandTimeout = 300
        db.AddInParameter(dbCommand, "ClientID", DbType.String, ddlCompany.SelectedValue)
        db.AddInParameter(dbCommand, "startPeriod", DbType.String, ddlStartPeriod.SelectedValue)
        db.ExecuteDataSet(dbCommand)

        lblWarning.Text = "Please confirm that the <strong>ClientID and startPeriod </strong> are populated in the dropdown list."
        lblWarning.Visible = True
        lblConfirmation.Visible = False

    Catch ex As Exception
        valUpload.ErrorMessage = "There has been an unexpected error generating the page<br>(" + Err.Description + ")"
        valUpload.IsValid = False
    End Try
End Sub

我認為這里的問題是線

db.ExecuteDataSet(dbCommand)

從我所看到的,您要運行的命令是

db.ExecuteNonQuery(dbCommand)

這是一個示例網站。 該代碼在C#中,但是我認為您可以對它有基本的了解。 如果確實需要,也可以在其上使用翻譯器。

http://msdn.microsoft.com/zh-CN/magazine/cc188702.aspx#S2

我將其重寫為類似於以下內容:

Protected Sub RunValidation_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RunValidation.Click
  Using cnn As New SqlClient.SqlConnection("MyConnection")
    cnn.Open()

    Using cmd As New SqlClient.SqlCommand("Company.dbo.uspMyStoredProcedure", cnn)
      cmd.CommandTimeout = 30
      cmd.Parameters.Add(New SqlClient.SqlParameter("ClientID", SqlDbType.NVarChar, 50) With {.Value = ddlCompany.SelectedValue})
      cmd.Parameters.Add(New SqlClient.SqlParameter("startPeriod", SqlDbType.NVarChar, 50) With {.Value = ddlStartPeriod.SelectedValue})

      Try
        cmd.ExecuteNonQuery()
      Catch ex As Exception
        valUpload.ErrorMessage = "There has been an unexpected error generating the page<br>(" + Err.Description + ")"
        valUpload.IsValid = False
      End Try

      lblWarning.Text = "Please confirm that the <strong>ClientID and startPeriod </strong> are populated in the dropdown list."
      lblWarning.Visible = True
      lblConfirmation.Visible = False

    End Using
  End Using
End Sub

一些注意事項:

  • 在try-catch中包裝盡可能少的代碼。 在這種情況下,僅數據庫應該成為引起關注的原因(請確保您已驗證輸入)。
  • using語句在出現問題時非常巧妙地布置了連接和命令對象。
  • 您可能希望進一步重構代碼,將數據庫調用部分保留在單獨的函數/子目錄中,並在其他位置設置標簽和UI消息。

暫無
暫無

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

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