Как мне запрограммировать несколько параметров в код для хранимой процедуры SQL Server - PullRequest
0 голосов
/ 03 мая 2020

Во-первых, извинения, если на мой вопрос ответили, хотя я посмотрел. Во-вторых, я начинающий и следую руководству SQL, которое не является двусторонним: они не отвечают на запросы. Я искал везде, но не могу найти ответ, который я понимаю.

У меня есть .mdf таблица базы данных с 13 столбцами. Я создал хранимую процедуру, которая работает извне Visual Studio, вызывая функцию exec.

exec [SeeFirst] [Peter] 

Возвращает строку, содержащую Peter в столбце FirstName.

Хранимая процедура SQL Server:

CREATE PROCEDURE [dbo].[SeeFirst]
    @param1 varchar(50) = 0
AS
    SELECT *
    FROM Mentor
    WHERE Mentor.FirstName = @param1 ;

    RETURN 0

и имеет вид называется так:

Dim conString As String
conString = My.Settings.Mentor2020DB
Dim con As New SqlClient.SqlConnection(conString)
con.Open()

Dim param

Select Case ci
    Case 1
        Dim cmd As New SqlClient.SqlCommand("SeeFirst", con)
        param = Trim(txtSearch.Text)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.Add(New SqlClient.SqlParameter("@param1", param))
        Dim adapter As New SqlClient.SqlDataAdapter(cmd)
        Dim dataTable As New DataTable()
        adapter.Fill(dataTable)
        DataGridView1.DataSource = Binder
        Binder.DataSource = dataTable
     Case = 2

& et c.

Я показываю все вышеизложенное, чтобы дать полную историю того, как я пытаюсь работать.

Сейчас к моей проблеме: у меня есть хранимая процедура с 12 параметрами, которая работает в области создания хранимой процедуры и вставляет новую запись в табе.

Если я выполню

exec [AddNew] [param1,param2, .... param12] 

, все работает хорошо. Итак, я доволен хранимой процедурой, которая в основном похожа на описанную выше [SeeFirst], но с большим количеством параметров.

Хранимая процедура, которая работает:

CREATE PROCEDURE [dbo].[AddNew]
    @FirstName varchar(50) = 0,
    @LastName varchar(50),
    @Company varchar(50),
    @Address varchar(50),
    @TDate varchar(50),
    @TLength int,
    @Miles int,
    @Radius int,
    @Band int,
    @FileName varchar(50),
    @TResult varchar(50),
    @TNotes varchar(2500)
AS
    INSERT INTO Mentor
    VALUES (@FirstName, @LastName, @Company, @Address,
            @TDate, @TLength, @Miles, @Radius, @Band, @FileName, @TResult, @TNotes)
    RETURN 0

Но я не могу заставить мою программу принять эти множественные параметры из моего программного кода.

Private Sub mnuMainAdd_Click(sender As Object, e As EventArgs) Handles mnuMainAdd.Click
' Trying to add a new record

Dim param(0 To 12)

Dim conString As String
conString = My.Settings.Mentor2020DB
Dim con As New SqlClient.SqlConnection(conString)
con.Open()

param(0) = " "
param(1) = txtFirstName.Text
param(2) = txtLastName.Text
param(3) = txtCompany.Text
param(4) = txtAddress.Text
param(5) = txtTDate.Text
param(6) = txtTLength.Text
param(7) = txtMiles.Text
param(8) = txtRadius.Text
param(9) = txtBand.Text
param(10) = txtFileName.Text
param(11) = txtTResult.Text
param(12) = txtTNotes.Text

Dim cmd As New SqlClient.SqlCommand("AddNew", con)
cmd.CommandType = CommandType.StoredProcedure
Dim access
access = "@FirstName", param(1), "@LastName", param(2), "@Company", param(3), "@Address", param(4), 
"@param6", param(6), "@param7", param(7), "@param8", param(8), "@param9", param(9), "@param10", 
"@param(10), "@param11", param(11), "@param12", param(12)
cmd.Parameters.Add(New SqlClient.SqlParameter(access)
Dim adapter As New SqlClient.SqlDataAdapter(cmd)
Dim dataTable As New DataTable()
adapter.Fill(dataTable)
DataGridView1.DataSource = Binder
Binder.DataSource = dataTable

Если я дал слишком много информации, то извините. Но я так часто читаю здесь, что решение не может быть дано из-за недостатка информации.

Спасибо вам всем за то, что вы прочитали это, и я надеюсь на совет, ведущий к решению.

С уважением,

Пит F

1 Ответ

0 голосов
/ 03 мая 2020

Я - c# человек, поэтому проверьте, есть ли синтаксическая ошибка для vb.net. Вам необходимо добавить параметры по отдельности


...
cmd.Parameters.Append .CreateParameter("@Parameter1",adInteger,adParamInput,,1)
cmd.Parameters.Append .CreateParameter("@Parameter2",adVarChar,adParamInput,100,"Up to 100 chars")
cmd.Parameters.Append .CreateParameter("@Parameter3",adBoolean,adParamInput,,true)
...

Вот аналогичная ситуация Добавить массив параметры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...