2011-07-14 2 views
0

私は私のasp.net Webサイトを通じてデータベーステーブルに挿入した最後のレコードのIDを取得しようとしています。
私のinsert statmentはストアドプロシージャですが、私はスカラー関数を使ってみましたが、これは私にこれを与えています。指定されたキャストは無効です。挿入ステートメントに対してスカラーを実行

これは私が使用しています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; 
} 

すべてのヘルプははるかにあるくださいは

+0

command.ExecuteScalar()は何かを返しますか?もしそうなら、どんなタイプですか? –

+1

出力パラメータを使用する方が良いか返り値を返します。 http://msdn.microsoft.com/en-us/library/59x02y99(v=vs.71).aspx –

+0

commad.execute scallar return 0 – wandos

答えて

-1

- 私にそれをappreiciateあなたの問題を理解しているかどうかは絶対に分かりませんが、電話が必要です。

command.ExecuteNonQuery(); 
+0

私は必要です最後に挿入されたレコードのIDを取得します。 commad.executeNonQueryは何も返しません。 – wandos

+0

いいえExecuteScalarは単一の値を戻すことはできません。 ExecuteNonQueryはキー値を返しません。 –

1

あなたのような状況を解決するように見えるので、私は、私はあなたを助けることができると思いexample on MSDNを発見したストアドプロシージャでとC#コードで出力パラメータを作成し、単純には、ExecuteNonQuery

0

。この例では、ストアドプロシージャではなくクエリのみを使用していますが、多分役立ちます。返されるものがない場合、スカラークエリは常に値を返します。あなたのインサートが効いていますか?おそらく、挿入が失敗したために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; 
} 
関連する問題