2011-03-12 33 views
1

我正在为自己创建一个ASP.NET Wiki以跟踪我在C#和其他语言中获得的知识。存储程序与IsIDenity和cmd.Parameters.Add

我已经创建了一个存储过程来将一个类别插入到数据库中,DB有两个字段C_ID(int)和Category(varchar 25)。在我的ASP页面中,没有用于C_ID的字段,它通过IsIdentiy = true自动递增;

当我尝试EXCUTE它,它失败。处理这个问题的最佳方法是什么?

代码:

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(); 



     } 

回答

3

刚刚从插入省略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, 
+0

我得到了那部分。我错过了什么插入我的ASP页面? – jpavlov 2011-03-12 20:23:32

+0

尝试 { //创建一个标识存储过程的命令对象 SqlCommand cmd = new SqlCommand(“InsertCategory”,conn); //设置命令类型 cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter(“Category”,txtAddCatagory)); cmd.ExecuteNonQuery() } – jpavlov 2011-03-12 20:24:19

+0

@jpavlov:尝试添加与'@'的参数,如'新的SqlParameter( “@范畴”'? – Andomar 2011-03-12 20:42:21

1

所以你得到你不能插入标识列例外,对不对?诀窍是不要在插入语句中指定标识列,因为它会自动填充......;)

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

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