2011-05-06 3 views
0

Я довольно новичок в VB, и я не уверен, почему это не работает, в основном я пытаюсь запустить хранимую процедуру из своего веб-кода. Sp работает очень хорошо в SQL, я пробовал его несколько раз, поэтому я уверен, что это не проблема. Я не хочу возвращать какие-либо результаты, я просто хочу увидеть инструкцию «ok», если она запущена, и сообщение об ошибке, если это не так. Код, который я использую для таблиц (предупреждения и подтверждения), повторно используется ранее на той же странице, то же самое относится к валидации (valUpload). Я уверен, что решение просто ...Проблема вызова хранимой процедуры из VB.NET

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

Решение еще проще, если вы сообщите нам, в каком смысле он не работает. Вы получаете сообщения об ошибках? Какой номер строки? Что говорит ошибка? Что такое трассировка стека? Правильно ли строка подключения? – mellamokb

+0

Разве вы не должны использовать SqlCommand вместо DbCommand? –

+0

Надеюсь, это ответит на некоторые вопросы: 1, он не запускает хранимую процедуру, насколько я могу видеть. Никакие результаты не попадают в мои таблицы, даже если это необходимо (когда я позже запускаю sp в SQL, он заполняет все) 2, никаких сообщений об ошибках вообще, кажется, что он работает нормально, и поэтому это так расстраивает для меня, я действительно не начинайте, когда начинать, когда я даже не получаю сообщение об ошибке. Я могу загружать страницы, и все это работает на плавнике или, по крайней мере, кажется, работает просто отлично. Любая другая информация, которую я забыл? –

ответ

0

Я думаю, что здесь речь идет линия

db.ExecuteDataSet(dbCommand) 

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

db.ExecuteNonQuery(dbCommand) 

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

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

0

Я бы переписать его на что-то похожее на это:

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 

Несколько замечаний:

  • Wrap как мало кода, насколько это возможно в примерки уловом. В этом случае причиной может быть только база данных (если вы подтвердили ввод данных).
  • using statement очень аккуратно располагает ваши объекты соединения и команды в случае возникновения проблем.
  • Возможно, вы захотите еще раз реорганизовать код, сохранив раздел для вызова базы данных в отдельной функции/подпрограмме и установив метки и сообщения пользовательского интерфейса где-нибудь в другом месте.
Смежные вопросы