Member 14832867 Ответов: 1

Как перенести код в хранимую процедуру


Dim commandText As String = "SELECT DISTINCT BLCHARGE_SOC_COC, BLCHARGE_BL_NO FROM bl_master, bl_charge WHERE BLCHARGE_BL_NO = BL_NO  and BLCHARGE_BL_NO = @BL_NO and BLCHARGE_SOC_COC is not null"
Dim command As SqlCommand = New SqlCommand(commandText, conn)
Dim da77a As SqlDataAdapter = New SqlDataAdapter()
Dim myDataSet77a As New Data.DataSet
command.Parameters.AddWithValue("@BL_NO", myDataNvocc.Tables(0).Rows(y).Item("BL_NO"))
da77a.SelectCommand = command
da77a.Fill(myDataSet77a, "bl_master")


Что я уже пробовал:

Данные, по-видимому, не заполняются в наборе данных, когда я перемещаю commandText в хранимую процедуру

Richard MacCutchan

Пожалуйста, отредактируйте свой вопрос и покажите код, который вы используете для вызова процедуры, и процедуру в том виде, в каком она написана. Также объясните, какие фактические результаты или ошибки возвращаются.

Member 14832867

Ошибки нет, но данные заполняются неверно. Кстати myDataNvocc это набор данных

1 Ответов

Рейтинг:
2

OriginalGriff

Хранимая процедура SQL - это просто список команд SQL, которые должны выполняться вместе, и предназначены для обеспечения процедур проверки данных, контроля доступа или просто для предотвращения необходимости одного и того же кода SQL в нескольких местах во внешних приложениях. После создания хранимая процедура может быть вызвана из SQL-кода или выполнена непосредственно во внешнем коде, просто используя имя SP (и предоставляя любые необходимые параметры).

Таким образом, SP - версия простой команды такова ... просто простая команда, завернутая в SQL для создания процедуры:

CREATE PROCEDURE sp_SelectByID 
    @ID INT
AS
BEGIN
	SELECT * FROM MyTable WHERE ID = @ID;
END

Как только этот код будет выполнен в SQL, вы можете вызвать sp_SelectByID вместо ввода текста "SELECT * FROM MyTable WHERE ID = @ID"в качестве текста вашей команды SQLCommand и сообщая экземпляру SqlCommand, что это вызов процедуры, а не текстовая команда (а также предоставляя значение параметра)

Поэтому, если ваш существующий - простой SELECT - код работает изолированно и терпит неудачу как SP, то либо вы создаете SP неправильно, либо вызываете его плохо. Я бы начал с тестирования SP в SSMS ("DB ... Программируемость ... сохраняемые процедуры ... YourSPName", щелкните правой кнопкой мыши, "выполнить хранимую процедуру..." вызовет диалоговое окно для ввода значения параметра) и посмотрите, что там происходит в первую очередь. Когда это сработает, попробуйте вызвать его из VB.