-1

我试图从 C# winforms 应用程序简单地将数据插入到 SQL Server 中的表中。

目前在执行查询时我收到错误:

“soAddItems”附近的语法不正确

这是我insert处理数据库 CRUD 操作的类的代码:

注:作为测试数据:

  • itemName = "测试"
  • skuNo = "a123"
  • 商品价格 = 2.99
  • stockItemToAdd = 3
  • itemPic = "C:\Users\Name\Pictures\pic.png"**

代码:

public virtual void AddItem(string itemName, string skuNo, double itemPrice, int stockAmountToAdd, string itemPic)
{
        using (SqlConnection open = new SqlConnection(connectionString))
        {
            SqlCommand insertCommand = new SqlCommand("soAddItems", open);

            open.Open();

            insertCommand.Parameters.Add("@itemName", SqlDbType.NChar).Value = itemName;
            insertCommand.Parameters.Add("@skuNo", SqlDbType.VarChar).Value = skuNo;
            insertCommand.Parameters.Add("@itemPrice", SqlDbType.Decimal).Value = itemPrice;
            insertCommand.Parameters.Add("@instockAmount", SqlDbType.BigInt).Value = stockAmountToAdd;
            insertCommand.Parameters.Add("@lastSold", SqlDbType.DateTime).Value = DateTime.Today;
            insertCommand.Parameters.Add("@itemPic", SqlDbType.NChar).Value = itemPic;

            //***** Error on the execute*****
            insertCommand.ExecuteNonQuery();
        };
    }

SQL Server 存储过程:

ALTER PROC [dbo].[soAddItems]
   @itemName nchar,
   @skuNo varchar,
   @itemPrice float,
   @instockAmount bigint,
   @lastSold dateTime, 
   @itemPic varchar
AS
BEGIN
    INSERT INTO items (itemName, skuNo, itemPrice, instockAmount, lastSold, itemPic) 
    VALUES (@itemName, @skuNo, @itemPrice, @instockAmount, @itemPic)
END

谁能告诉我哪里出错了?

4

3 回答 3

2

您需要将SqlCommand命令类型告知为存储过程。

尝试这个:

insertCommand.CommandType = CommandType.StoredProcedure;
于 2013-11-02T19:32:09.617 回答
1

您似乎忘记分配您的SqlCommand.CommandType财产。

因为它是Text默认的。

insertCommand.CommandType = CommandType.StoredProcedure;
于 2013-11-02T19:31:50.040 回答
0

除了缺失之外CommandType.StoredProcedure,您还有第二个主要缺陷:如果您定义这样的参数:@skuNo varchar- 那么您会得到一个1 个字符长度的字符串!

这通常不是您想要的 - 在 T-SQL 中定义参数和变量时,您应该始终指定长度!

使用:@skuNo varchar(50)或您需要的任何长度

于 2013-11-02T20:17:48.990 回答