'Должен объявить скалярную переменную "@SKU".' - PullRequest
1 голос
/ 07 апреля 2019

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

Код работает с оператором SELECT, но некогда я делаю вставку, я всегда получаю сообщение об ошибке:

System.Data.SqlClient.SqlException: 'Должен объявить скалярную переменную "@SKU".

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

public class Products
{
    public string SKU;
    public string Title;
    public string ImageLink;
}

Использование функции dapper для вставки:

public void insertItem(Products newProduct)
{
    using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.CnnVal("SellersDB")))
    {
        List<Products> dbnewProduct = new List<Products>();
        dbnewProduct.Add(newProduct);

        connection.Execute("dbo.Item_Insert @SKU, @Title, @ImageLink", dbnewProduct);
    }
}

Процедура:

CREATE PROCEDURE [dbo].[Item_Insert]

@SKU nchar(10),
@Title nchar(100),
@ImageLink nchar(50)

AS
BEGIN
SET NOCOUNT ON;

insert into dbo.ProductsTable (SKU, Title, ImageLink) values (@SKU, @Title, @ImageLink);

END

База данных:

CREATE TABLE [dbo].[ProductsTable] (

[SKU]       NCHAR (10)  NULL,
[Title]     NCHAR (100) NULL,
[ImageLink] NCHAR (50)  NULL
);

Произошла ошибка на линии возбуждения.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

Dapper хочет свойства, а не поля; попробовать:

public class Products
{
    public string SKU {get;set;}
    public string Title {get;set;}
    public string ImageLink {get;set;}
}

и попробуйте еще раз; вам нужно только передать один объект - вам не нужен список здесь. Вы можете объединить это с подходом CommandType.StoredProcedure, если вы выберете (как отметил MarcinJ) - но будьте осторожны, что это обменивает позиционную передачу параметров (в исходном вопросе) на именованная передача параметров - поэтому убедитесь, что это не меняет значения.

1 голос
/ 07 апреля 2019

Способ вызова хранимой процедуры с помощью Dapper:

connection.Execute("Item_Insert", dbnewProduct, commandType: CommandType.StoredProcedure);

Кроме того, вам не нужен список, вы можете просто использовать newProduct там.

...