2013-11-02 3 views
-1

Я пытаюсь просто вставить данные в таблицу на SQL Server из приложения winforms C#.Ошибка в SQL Server Вставить хранимую процедуру

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

Incorrect syntax near 'soAddItems'

Вот мой insert код класса обработки моих CRUD операции с базами данных:

Примечание: В качестве тестовых данных:

  • ITEMNAME = "тест"
  • 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 :

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 

Может ли кто-нибудь сказать мне, где я иду не так?

+0

Ваш тип команды должен быть StoredProcedure, нет? Кроме того, [почему ваши параметры nchar и varchar не указывают длину] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without- length.aspx)? –

ответ

2

В качестве хранимой процедуры вам необходимо указать тип команды SqlCommand.

Попробуйте это:

insertCommand.CommandType = CommandType.StoredProcedure; 
1

Похоже, вы забываете назначить свой SqlCommand.CommandType объект.

Потому что это Text по умолчанию.

insertCommand.CommandType = CommandType.StoredProcedure; 
0

Кроме отсутствующего CommandType.StoredProcedure, у вас есть второй главный недостаток: если вы определите параметр, как это: @skuNo varchar - тогда вы получите строку длины 1 символов!

Это обычно не то, что вы хотите - вы должны ALWAYS указать длину при определении параметров и переменных в T-SQL!

Использование: @skuNo varchar(50) или любой длины вам нужно

+0

Забавно, что вы должны сказать, что marc, поскольку я просто пытался выяснить, почему мой путь к изображению был установлен на 1 символ! Большое спасибо за это, я довольно новичок в SQL-сервере. – user1352057

Смежные вопросы