SQL Server上的错误插入存储过程

时间:2013-11-02 19:28:28

标签: c# sql sql-server

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

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

  

' soAddItems'

附近的语法不正确

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

注意:作为测试数据:

  • itemName =" test"
  • skuNo =" a123"
  • itemPrice = 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

谁能告诉我哪里出错?

3 个答案:

答案 0 :(得分:2)

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

试试这个:

insertCommand.CommandType = CommandType.StoredProcedure;

答案 1 :(得分:1)

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

因为默认为Text

insertCommand.CommandType = CommandType.StoredProcedure;

答案 2 :(得分:0)

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

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

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