Хранимая процедура с IsIDenity и cmd.Parameters.Add - PullRequest
1 голос
/ 12 марта 2011

Я создаю ASP.NET Wiki для себя, чтобы отслеживать знания, которые я получаю в C # и других языках.

Я создал хранимую процедуру для вставки категории в БД, в БД есть два поля: C_ID (int) и Category (varchar 25).На моей странице ASP нет поля для C_ID, оно автоматически увеличивается на IsIdentiy = true;

Когда я пытаюсь извинить его, он терпит неудачу.Как лучше всего справиться с этим?

Код:

ALTER PROCEDURE dbo.InsertCategory
 @ID int,
 @CATEGORY varchar(25)
 AS

INSERT INTO Wiki
(C_ID, C_Category)
Values  (@ID, @CATEGORY)
    /* SET NOCOUNT ON */
    RETURN

Я что-то пропустил, чтобы вставить со страницы .aspx?попробуй {

            //create a command object identifying the Stored Procedure
            SqlCommand cmd = new SqlCommand("InsertCategory", conn);

            //Set the command type
            cmd.CommandType  = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("Category", txtAddCatagory));

            cmd.ExecuteNonQuery();



        }

Ответы [ 2 ]

3 голосов
/ 12 марта 2011

Просто опустите id из вставки.Если вы правильно настроили identity, база данных позаботится об увеличении числа.Например:

GO
ALTER PROCEDURE dbo.InsertCategory(@CATEGORY varchar(25))
AS
INSERT INTO Wiki (C_Category) Values (@CATEGORY)
GO

Чтобы убедиться, что identity задан правильно, при сценарии таблицы столбец C_id должен выглядеть так:

[C_id] [int] IDENTITY(1,1) NOT NULL,

Или даже лучше:

[C_id] [int] IDENTITY(1,1) PRIMARY KEY,
1 голос
/ 12 марта 2011

То есть вы получаете исключение, которое не можете вставить в столбец идентификаторов, верно?Хитрость заключается в том, чтобы не указывать столбец идентификатора в операторе вставки, поскольку он автоматически заполняется ...;)

ALTER PROCEDURE dbo.InsertCategory @CATEGORY varchar(25) AS

INSERT INTO Wiki (C_Category) Values (@CATEGORY) /* SET NOCOUNT ON */ RETURN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...