#1 27.11.05 07:22
Задание и возврат параметров из процедуры SQL(Visual Basic)
Имеем процедуру SQL (SP_STUDENT_WORK)
Код: sql:
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[SP_STUDENT_WORK]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) DROP procedure [dbo].[SP_STUDENT_WORK] GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO --Производит различные действия с работами студента CREATE PROCEDURE SP_STUDENT_WORK ( @Typ integer, -- тип действия -- 1 - просмотр информации о работах студента -- 2 - просмотр информации о конкретной работе студента -- 3 - добавление студенту записи о работе -- 4 - изменение данных о работе -- 5 - удаление записи о работе @UID integer = NULL, -- Идентификатор записи @Stud integer =NULL , -- Студент @Work integer = NULL, -- Работа @DT1 datetime = NULL, -- Дата начала работы @DT2 datetime = NULL, -- Дата окончания работы @Comment varchar(200) = NULL -- Примечание ) AS IF (@Typ = 4 OR @Typ = 3) AND @DT1 IS NULL BEGIN RAISERROR (50101, 16,1) RETURN END IF @Typ = 1 SELECT NameWork, DT1,DT2,Comment FROM StudWork s INNER JOIN TypWork w ON s.WorkID=w.WorkID IF @Typ = 2 SELECT NameWork, DT1,DT2,Comment FROM StudWork s INNER JOIN TypWork w ON s.WorkID=w.WorkID WHERE UID = @UID IF @Typ = 3 BEGIN INSERT INTO StudWork (StudZach, WorkID, DT1, DT2, Comment) VALUES (@Stud, @Work, @DT1, @DT2, @Comment) END IF @Typ = 4 UPDATE StudWork SET StudZach = @Stud, WorkID = @Work, DT1 = @DT1, DT2 = @DT2, Comment = @Comment WHERE UID = @UID IF @Typ = 5 DELETE FROM StudWork WHERE UID = @UID GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
Как видно из кода выпoлнение процедуры зависит от переданных в неё значений парметра Typ
Вопрос как на VB.net сформировать запрос на исполнение этой процедуры с нужным мне параметром, и самое главное как получить возращаемые процедурой значения...?
Предполагаю что передать в процедуру параметры можно так
Код: VB.net:
With OleDbCommand1 Command1 = New ADODB.Command Command1.ActiveConnection = cn Command1.CommandText = "SP_STUDENT_WORK" Command1.CommandType = System.Data.CommandType.StoredProcedure param = Command1.CreateParameter("@typ", ADODB.DataTypeEnum.adVarChar, ADODB.ParameterDirectionEnum.adParamReturnValue, 3) Command1.Parameters.Append(param) End With OleDbConnection1.Open() OleDbCommand1.ExecuteNonQuery() 'Вот тут прога подвисает OleDbConnection1.Close()
Но у меня программа подвисает как только доходит до OleDbCommand1.ExecuteNonQuery() с сообщением Additional information: ExecuteNonQuery: Connection property has not been initialized.
А как получить параметры от процедуры я вообще ума не приложу :(
Исправлено eagle (27.11.05 08:41)
Offline
#2 27.11.05 11:12
Re: Задание и возврат параметров из процедуры SQL(Visual Basic)
Не смешивай красное с круглым :) т.е. ADO.NET и ADO
И, кстати, если ты работаешь с MS SQL Server то лучше использовать специализированного поставщика из System.Data.SqlClient namespace.
Вот пример кода:
Код: 'csharp':
using(SqlConnection lSqlConnection = new SqlConnection(cConnectionString)) { SqlCommand lSqlCommand = lSqlConnection.CreateCommand(); lSqlCommand.CommandTimeout = 36000; //10 hours lSqlCommand.CommandType = CommandType.StoredProcedure; lSqlCommand.CommandText = "sp_MoveToSADB_ARCHIVE"; SqlParameter lSqlParameter; lSqlParameter = lSqlCommand.Parameters.Add("@Year", SqlDbType.SmallInt, 2, "Year"); lSqlParameter.Value = pYear; lSqlParameter = lSqlCommand.Parameters.Add("@Month", SqlDbType.TinyInt, 1, "Month"); lSqlParameter.Value = pMonth; lSqlConnection.Open(); lSqlCommand.ExecuteNonQuery(); }
Исправлено Logos (27.11.05 11:34)
Offline

