2011-07-14 73 views
0

我想獲取我通過我的asp.net網站插入數據庫表的最後一條記錄的id。
我的插入語句是一個存儲過程,我試過使用標量函數,但它給了我這個指定的轉換無效。對插入語句執行標量

這是INSERT語句,我現在用:

@ClientID varchar(250), 
@BType varchar(250), 
@CIP varchar(50), 
@Sess varchar(500), 
@LoggedIn int, 
@LoggedInTime datetime 

AS 
BEGIN 
    INSERT INTO tblSession (ClientID, BType, CIP, Sess, LoggedIn, LoggedInTime) VALUES (@ClientID, @BType, @CP,@Sess, @LoggedIn, @LoggedInTime) 
    SELECT SCOPE_IDENTITY() 
END 

的,我是調用方法:

using (SqlConnection con = DBConnection.getConnection()) 
{ 
    string sql = "Add"; 
    SqlCommand command = new SqlCommand(sql, con); 
    command.CommandType = CommandType.StoredProcedure; 

    command.Parameters.Add("@ClientID ", SqlDbType.VarChar).Value = id; 
    command.Parameters.Add("@BType", SqlDbType.VarChar).Value = bt; 
    command.Parameters.Add("@CIP", SqlDbType.VarChar).Value = cip; 
    command.Parameters.Add("@Sess", SqlDbType.VarChar).Value = s; 
    command.Parameters.Add("@LoggedIn", SqlDbType.Int).Value = LoggedIn; 
    command.Parameters.Add("@LoggedInTime", SqlDbType.DateTime).Value = session.LoggedInTime; 

    int x; 
    x = (int)command.ExecuteScalar(); 
    return x; 
} 

請任何幫助是非常appreiciate它

+0

是否command.ExecuteScalar()返回任何東西?如果是這樣,它是什麼類型? –

+1

更好地使用輸出參數或返回值; http://msdn.microsoft.com/en-us/library/59x02y99(v=vs.71).aspx –

+0

commad.execute scallar返回0 – wandos

回答

-1

I'm絕對不知道,如果我明白你的問題,但呼籲應該是

command.ExecuteNonQuery(); 
+0

我需要檢索最後插入的記錄的ID。而commad.executeNonQuery不會返回任何內容。 – wandos

+0

沒有ExecuteScalar是返回單個值的權利。 ExecuteNonQuery不會返回鍵值。 –

1

創建存儲過程,並在C#代碼的輸出參數,並簡單的ExecuteNonQuery

0

我發現了一個example on MSDN我認爲這可以幫助你,因爲它似乎解決了像您這樣的情況。在這個例子中,它只使用查詢而不是存儲過程,但也許可以提供幫助。標量查詢總是返回一個值,如果沒有返回值,則返回NULL。你確定你的插入工作?也許它因爲插入失敗而返回NULL。

static public int AddProductCategory(string newName, string connString) 
{ 
    Int32 newProdID = 0; 
    string sql = 
     "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); " 
     + "SELECT CAST(scope_identity() AS int)"; 
    using (SqlConnection conn = new SqlConnection(connString)) 
    { 
     SqlCommand cmd = new SqlCommand(sql, conn); 
     cmd.Parameters.Add("@Name", SqlDbType.VarChar); 
     cmd.Parameters["@name"].Value = newName; 
     try 
     { 
      conn.Open(); 
      newProdID = (Int32)cmd.ExecuteScalar(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
    return (int)newProdID; 
}