0

SQL コマンドを使用して、最後に挿入された自動生成された RowID (またはキー) を抽出し、C# 変数として保存しようとしています。

前半はできるけど後半は無理…。

更新しました:-

Int32 newRowID = 0;

    // -------------------------------------------------------------------- //
    // SQL Query-1: to store validated information in the Enrollment table. //
    // -------------------------------------------------------------------- //
    SqlConnection Connection = new SqlConnection(xxx_DBConnect.SqlServerConnection);

    String strSQL = " OPEN SYMMETRIC KEY zzzzzzzKey DECRYPTION BY CERTIFICATE zzzzzzzCertificate1"
        + " INSERT INTO [xxx].[dbo].[yyy]"
        + " (Type, Name, DBA, Address1, City, State, Zip, TIN, TINLast4, NPI)"
        + " values (@Type, @Name, @DBA, @Address1, @rCity, @State, @Zip, ENCRYPTBYKEY(KEY_GUID('zzzzzzz'),CONVERT(VARCHAR, @TIN)), @TINLast4, @rNPI)"
        + " CLOSE SYMMETRIC KEY zzzzzzzKey;"
        + " SET @RowId = SCOPE_IDENTITY();";

    // Connection is explicitly opened.
    Connection.Open();

    SqlCommand command = new SqlCommand(strSQL, Connection);

    SqlParameter parameter = new SqlParameter();
    parameter.ParameterName = "@RowId";
    parameter.SqlDbType = SqlDbType.Int;
    parameter.Direction = ParameterDirection.Output;
    command.Parameters.Add(parameter);


    command.Parameters.AddWithValue("@Type", _type);
    command.Parameters.AddWithValue("@Name", _Name);
    command.Parameters.AddWithValue("@DBA", _DBA);
    command.Parameters.AddWithValue("@Address1", _address);
    command.Parameters.AddWithValue("@City", _city);
    command.Parameters.AddWithValue("@State", _state);
    command.Parameters.AddWithValue("@Zip", _zip);
    command.Parameters.AddWithValue("@TIN", _tIN);
    command.Parameters.AddWithValue("@TINLast4", _TINlast4);
    command.Parameters.AddWithValue("@NPI", _nPI);

    //newRowID = (Int32)command.ExecuteScalar();// <--- how do I write this in the correct syntax ?? ....

    command.ExecuteNonQuery();


    if (parameter.Value != DBNull.Value)
        {
            newRowID = (int)parameter.Value;
        }


    Connection.Close();

エラーは発生しませんが、newRowID = 0 ...期待される結果は130です....返されたSQLparamaterが「0」を返していると仮定しています

次の構文の正しい書き方はありますか?

C# コードの任意の場所で変数 newRowID にアクセスして使用できるように...

4

3 に答える 3

1

このように出力パラメータをデータベースに渡す必要があります

SqlParameter sqlParameter = new SqlParameter();
sqlParameter.ParameterName = "@RowId";
sqlParameter.SqlDbType = SqlDbType.Int;
sqlParameter.Direction = ParameterDirection.Output;

command.Parameters.Add(sqlParameter);

次に、この行をSQL​​から削除する必要があります

declare @RowId int;

最後に、クエリを実行した後、このような値を取得できます

if(sqlParameter.Value != DBNull.Value)
   newRowID  = (Int32)sqlParameter.Value;

編集:

パラメータの戻り値の型が質問に記載されていないため、ここでは Int32 を使用しました。お好みのタイプでご利用いただけます。

于 2013-07-29T18:10:16.150 に答える
1

RowId を出力パラメーターとして追加します (パラメーターとパラメーターのデータ型の構成)

Scope_Identity は 10 進数 (38,0) を返します

declare statement for @RowIdSQLクエリからを削除してください。

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@RowId";
parameter.SqlDbType = SqlDbType.Decimal; 
parameter.Direction = ParameterDirection.Output;

command.Parameters.Add(parameter);


command.ExecuteNonQuery();
if (parameter.Value!=DbNull.Value)
{
   newRowID = (Int32) parameter.Value;
}
于 2013-07-29T18:04:37.610 に答える