#asp.net #database #vb.net #visual-studio
#asp.net #База данных #vb.net #visual-studio
Вопрос:
Я довольно новичок в VB, и я не уверен, почему это не работает, в основном я пытаюсь запустить хранимую процедуру из моего веб-кода. sp отлично работает в SQL, я пробовал это несколько раз, поэтому я уверен, что проблема не в этом. Я не хочу возвращать никаких результатов, я просто хочу увидеть инструкцию «ok», если она выполняется, и сообщение об ошибке, если этого не происходит. Код, который я использую для ярлыков (предупреждения и подтверждения), повторно используется ранее на той же странице, то же самое касается проверок (valuepload). Я уверен, что решение простое…
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
Комментарии:
1. Решение будет еще проще, если вы скажете нам, в каком смысле это не работает. Вы получаете сообщения об ошибках? Какой номер строки? О чем говорится в ошибке? Что такое трассировка стека? Правильна ли ваша строка подключения?
2. Разве вы не должны использовать SqlCommand вместо DbCommand?
3. Надеюсь, это ответит на некоторые вопросы: 1, насколько я могу видеть, хранимая процедура не запускается. Никакие результаты не попадают в мои таблицы, даже когда должны (когда я позже запускаю sp в SQL, он заполняется нормально) 2, Сообщений об ошибках вообще нет, кажется, что все работает нормально, и именно поэтому это так расстраивает меня, я действительно не знаю, с чего начать, когда я даже не получаю сообщение об ошибке. Я могу загрузить страницы, и все это работает нормально, или, по крайней мере, кажется, что работает просто отлично. Любая другая информация, которую я пропустил?
4. Вы проверили, все ли параметры установлены правильно? Полагается ли ваша процедура на них в выполнении того, что она должна?
Ответ №1:
Я думаю, что проблема здесь в строке
db.ExecuteDataSet(dbCommand)
Из того, что я вижу, команда, которую вы хотите запустить, это
db.ExecuteNonQuery(dbCommand)
Вот пример сайта. Код написан на C #, но я думаю, вы сможете получить базовое представление о нем. Вы также могли бы использовать переводчик для нее, если вам действительно нужно.
Ответ №2:
Я бы переписал ее на что-то похожее на это:
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 очень аккуратно удаляет ваши объекты connection и command в случае возникновения проблем.
- Вероятно, вы захотите провести дальнейший рефакторинг кода, сохранив раздел вызова базы данных в отдельной функции / подразделе и установив метки и сообщения пользовательского интерфейса где-нибудь в другом месте.