2011-03-12 35 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