我正在使用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
);
错误发生在激励行上。
答案 0 :(得分:2)
Dapper需要属性,而不是字段;尝试:
public class Products
{
public string SKU {get;set;}
public string Title {get;set;}
public string ImageLink {get;set;}
}
,然后重试;您只需要传递单个对象-此处不需要列表。如果您选择(如MarcinJ所述),则可以使用CommandType.StoredProcedure
方法将其
答案 1 :(得分:1)
使用Dapper调用存储过程的方法是:
connection.Execute("Item_Insert", dbnewProduct, commandType: CommandType.StoredProcedure);
此外,您不需要列表,只需在此处使用newProduct
。