Официальный сайт студ.городка НГТУ
Программирование и БД » Пожалуйста объясните мне назначения строк следующего кода VB> 

#1  01.12.05 20:19

Пожалуйста объясните мне назначения строк следующего кода VB>

Код: VB.net:

Private Sub SetParameters()
    Dim Command As New SqlClient.SqlCommand("SalesByCategory")
    Command.CommandType = CommandType.StoredProcedure
    Command.Connection = dcNorthwind
    Dim CategoryName As New SqlClient.SqlParameter()
    CategoryName.ParameterName = "@CategoryName"
    CategoryName.SqlDbType = SqlDbType.NVarChar
 
    Dim OrdYear As New SqlClient.SqlParameter()
    OrdYear.ParameterName = "@OrdYear"
    OrdYear.SqlDbType = SqlDbType.NVarChar
    CategoryName.Value = "Condiments"
    OrdYear.Value = "1998"
    Command.Parameters.Add(CategoryName)
    Command.Parameters.Add(OrdYear)
    Dim daSalesByCategory As New SqlClient.SqlDataAdapter()
    daSalesByCategory.SelectCommand = Command
    Dim dsNorthwind As New DataSet()
    daSalesByCategory.Fill(dsNorthwind)
End Sub


Этот код должеy отправлять и получать параметры от ХП, но детального описания каждой строки не нашел, интерисуют строки

Код: vb.net:

Command.Connection = dcNorthwind 
daSalesByCategory.Fill(dsNorthwind)


Я создаю sqlDataAdapter
Переименовываю sqlConection1 в dcNorthwind
Создаю кнопку при нажатии которой вызыватеся выше указанная функция SetParameters(), после нажатия Button1 у меня приложение виснет нa daSalesByCategory.Fill(dsNorthwind) с соющением
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in system.data.dll

Additional information: Системная ошибка

Исправлено eagle (01.12.05 20:51)

Offline

#2  01.12.05 20:43

Re: Пожалуйста объясните мне назначения строк следующего кода VB>

>> Command.Connection = dcNorthwind
Говорим команде какое соединение использовать

>> daSalesByCategory.Fill(dsNorthwind)
заполняем датасет (одну или несколько таблиц, в зависимости от того что возвращает SP)

Offline

#3  01.12.05 20:53

Re: Пожалуйста объясните мне назначения строк следующего кода VB>

Спасибо! А ошибка из за чего такая может случится? (в исправленном первом посте)

Offline

#4  01.12.05 20:56

Re: Пожалуйста объясните мне назначения строк следующего кода VB>

все учебные пособия переискал но так и не смог найти ответ на вопрос как получить данные возращаемые процедурой :(

Offline

#5  01.12.05 21:04

Re: Пожалуйста объясните мне назначения строк следующего кода VB>

Может несовпадение типов параметров СП. Или к серверу приконнектится не может - поробуй руками соединение открыть. Можешь профайлером зацепиться - посмотреть что на сервер уходит, если с ходу ошибку не найдешь.

Исправлено Logos (01.12.05 21:04)

Offline

#6  01.12.05 21:51

Re: Пожалуйста объясните мне назначения строк следующего кода VB>

Вот  SP

Код: sql:

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS OFF 
GO
 
--Производит различные действия со студентами
 
ALTER  PROCEDURE SP_STUDENT
 
(
   @Typ integer,			-- тип действия
					-- 1 - просмотр информации о студентах 
					-- 2 - просмотр информации о студенте
					-- 3 - добавление
					-- 4 - изменение
					-- 5 - удаление
   @Zach integer =NULL ,		-- Номер зачетной книжки
   @SurName varchar(25) = NULL,	-- Фамилия
   @Name varchar(25) = NULL,		-- Имя
   @SecName varchar(25) = NULL,	-- Отчество
   @Born datetime = NULL		-- Дата рождения
)
 
AS
 
IF (@Typ = 3 OR @Typ = 4) AND @Zach IS NULL OR @SurName IS NULL OR @Name IS NULL OR @SecName IS NULL OR @Born IS NULL 
   BEGIN
	RAISERROR (50101, 16,1)	
	RETURN
    END
 
IF @Typ = 5 AND EXISTS (SELECT * FROM Student WHERE StudZach = @Zach)
   BEGIN
	RAISERROR (50102,16,1)	
	RETURN
    END
 
IF @Typ = 1
   SELECT  * FROM Student
 
IF @Typ = 2
   SELECT  * FROM Student WHERE StudZach = @Zach
 
IF @Typ = 3
BEGIN
   INSERT INTO Student (StudZach,SurName,[Name],SecName,Born)
   VALUES (@Zach,@SurName,@Name,@SecName,@Born)   
END
 
IF @Typ = 4
   DECLARE @sql varchar(4000)
   UPDATE Student SET StudZach = @Zach,SurName = @SurName,[Name] = @Name,SecName = @SecName,Born = @Born WHERE StudZach = @Zach
 
IF @Typ = 5
   DELETE FROM Student WHERE StudZach = @Zach
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
 


Вот Код VB

Код: vb.net:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim CustOrderHist As SqlClient.SqlCommand
        CustOrderHist = New SqlClient.SqlCommand
        CustOrderHist.CommandType = CommandType.StoredProcedure
        CustOrderHist.CommandText = "SP_STUDENT"
        CustOrderHist.Connection = SqlConnection1
 
        Dim sparam As SqlClient.SqlParameter
        sparam = New SqlClient.SqlParameter
        sparam.ParameterName = "@Typ"
        sparam.SqlDbType = SqlDbType.Int
        CustOrderHist.Parameters.Add(sparam)
 
        Dim Reader As SqlClient.SqlDataReader
        CustOrderHist.Parameters("@Typ").Value = "1"
        SqlConnection1.Open()
        Reader = CustOrderHist.ExecuteReader()
        ' Insert code to read through the datareader.
        SqlConnection1.Close()
       ' MsgBox(Reader)
    End Sub

При исполнении виснет на Reader = CustOrderHist.ExecuteReader()

Профайл говорит при запуски кода
exec sp_reset_connection

exec SP_STUDENT @Typ = 1

- network protocol: LPC
set quoted_identifier on
set implicit_transactions off
set cursor_close_on_commit off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set language us_english
set dateformat mdy
set datefirst 7

Исправлено eagle (01.12.05 22:10)

Offline

#7  01.12.05 23:56

Re: Пожалуйста объясните мне назначения строк следующего кода VB>

Что то я начинаю понимать что всякий раз когда я просто хочу сделать Execute не зависимо от базы и процедуры у меня приложение дают ошибку во время попытки запуска процедуры..

Offline

Программирование и БД » Пожалуйста объясните мне назначения строк следующего кода VB> 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.635 сек.
Выполнено 14 запросов.