2014-03-28 31 views
1

我有兩個字段(ID(INT,身份= YES),假(CHAR(10)))指定的轉換是無效的SQL Server查詢

( 「假」 字段是一個SQL Server數據庫因爲我無法弄清楚如何在不插入任何東西的情況下獲得新的id值,最終我只需要一個增量唯一的id)

當我在Server Management Studio中運行以下SQL ,我得到了我期望和想要的...

INSERT INTO [CMSCustom].[dbo].[sup_req_ids](fake) VALUES ('a'); SELECT SCOPE_IDENTITY() 

當我運行以下荷蘭國際集團的C#代碼在我的ASP.NET頁面,它給了我一個「指定的轉換無效」錯誤...

protected int insertRequest() 
{ 
    int modified = 0; 
    string sql = "Insert into sup_req_ids (fake) Values('a');SELECT SCOPE_IDENTITY()"; 

    string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["Ektron.CMSCustom"].ToString(); 

    using(SqlConnection conn = new SqlConnection(connStr)) 
    { 
     SqlCommand cmd = new SqlCommand(sql, conn); 
     try 
     { 
      conn.Open(); 
      modified = (int)cmd.ExecuteScalar(); 
     } 
     catch (Exception e) 
     { 
      Response.Write(e.Message); 
      Response.Write(e.StackTrace); 
      Response.Write(e.Source); 
     } 
    } 
    return modified; 
} 

堆棧跟蹤不給我一個行號,所以我不知道在哪裏這個錯誤來自於。

任何人都可以幫助解釋我要去哪裏錯了嗎?

回答

4

scope_identity()返回一個小數(因爲標識列不一定是int)。

的Unbox它爲十進制,然後轉換爲INT:

modified = (int)(decimal)cmd.ExecuteScalar(); 

此外,您還可以插入表中只標識列是這樣的:

insert [CMSCustom].[dbo].[sup_req_ids] default values; 
select scope_identity() 
+0

[面部掌] 謝謝@Blorgbeard – nedlud

+0

哈哈,無後顧之憂 – Blorgbeard

+1

SQL 2012還有'sequence's,可以讓你自動生成一個沒有表格的遞增ID –