0

SQL 挿入の問題。ストアド プロシージャを実行してテーブルに行を挿入し、作成された ID を返します。このように実行し、出力パラメーター @ID を使用して ExecuteNonQuery() を使用すると、int idinserted に対して -1 が返されますが、挿入された ID が返されます。レコードが挿入されたので、1 を返すべきではありません。ExecuteNonQuery を使用してレコードが挿入されたことを確認し、挿入された ID を取得したいと思います。

SQL 挿入

@person bigint,
@date datetime,
@ID bigint OUTPUT

AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO table(person,DATE_ADDED)
    VALUES (@person,@date)

    SELECT @ID = SCOPE_IDENTITY()
    cmd.Parameters.Clear();
    cmd.Parameters.AddWithValue("@person", person);
    cmd.Parameters.AddWithValue("@date", DateTime.Now);

    SqlParameter output = new SqlParameter("@ID", SqlDbType.Int);
    output.Direction = ParameterDirection.Output;

    cmd.Parameters.Add(output);
    int idinserted = (int)cmd.ExecuteNonQuery();
    if (idinserted > 0)
    {
        int ID = output.Value;
    }

このように挿入とc#を行うとExecuteScalar()

SQL INSERT

@person bigint,
@date datetime
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO table(person ,DATE_ADDED)
    VALUES(@person,@date )

    SELECT SCOPE_IDENTITY()

    cmd.Parameters.Clear();
    cmd.Parameters.AddWithValue("@person", person);
    cmd.Parameters.AddWithValue("@date", DateTime.Now);
    long ID = (long)cmd.ExecuteNonScalar();

ExecuteScalar()次のエラーをスローします

「指定されたキャストは無効です

4

1 に答える 1

0

削除する

SET NOCOUNT ON;

行数が削除されるためです。

于 2013-05-02T20:58:48.120 に答える