Проблема вызова хранимой процедуры из VB.NET - PullRequest
0 голосов
/ 06 мая 2011

Я довольно новичок в VB, и я не уверен, почему это не работает, в основном я пытаюсь запустить хранимую процедуру из своего веб-кода. SP прекрасно работает в SQL, я пробовал это несколько раз, поэтому я уверен, что это не проблема. Я не хочу возвращать какие-либо результаты, я просто хочу увидеть выражение "ОК", если оно выполняется, и сообщение об ошибке, если это не так. Код, который я использую для ярлыков (предупреждений и подтверждений), повторно используется ранее на той же странице, то же самое касается проверок (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

Ответы [ 2 ]

0 голосов
/ 07 мая 2011

Я бы переписал это примерно так:

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 очень аккуратно удаляет объекты соединения и команды в случае проблем.
  • Возможно, вы захотите еще больше изменить код, сохранив раздел вызова базы данных в отдельной функции / подпрограмме и установив метки и сообщения пользовательского интерфейса где-нибудь еще.
0 голосов
/ 07 мая 2011

Я думаю, что проблема здесь в строке

db.ExecuteDataSet(dbCommand)

Из того, что я вижу, команда, которую вы хотите запустить, является

db.ExecuteNonQuery(dbCommand)

Вот пример сайта. Код написан на C #, но я думаю, что вы можете получить общее представление о нем. Вы также можете использовать переводчик, если вам действительно нужно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...