开发者

Problem calling a stored procedure from VB.NET

开发者 https://www.devze.com 2023-03-03 04:45 出处:网络
I am pretty new to VB and I am not sure why this is not working, basically I am trying to run a stored procedure from my web code. The sp runs just fine in SQL, I\'ve tried it several times so I am su

I am pretty new to VB and I am not sure why this is not working, basically I am trying to run a stored procedure from my web code. The sp runs just fine in SQL, I've tried it several times so I am sure that is not the problem. I don't want to return any results, I just want to see an "ok" statement if it runs and an error message if it doesn't. The code I am using for the lables (warnings and confirmation) is reused from earlier on the same page, the same goes for the validations (valUpload). I am sure the solution is simple...

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.Ad开发者_开发知识库dInParameter(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


I think the issue here is the line

db.ExecuteDataSet(dbCommand)

From what I can see, the command you want to run is

db.ExecuteNonQuery(dbCommand)

Here is an example site. The code is in C# but I think you can get the basic understanding of it. You could also use a translator on it if you really needed to.

http://msdn.microsoft.com/en-us/magazine/cc188702.aspx#S2


I would rewrite it to something similar to this:

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

A few notes:

  • Wrap as little code as possible in a try-catch. In this case, only the database should be a cause of concern (granted you validated the inputs).
  • The using statement very neatly disposes your connection and command objects in case of problems.
  • You probably want to refactor the code even futher, keeping the database-calling section in a separate function/sub, and setting labels and UI messages somewhere else.
0

精彩评论

暂无评论...
验证码 换一张
取 消