7

この質問がこのサイトに何度もあることは知っていますが、コードを機能させることができません。

ステートメントがInsertあり、asp.net ページでそのステートメントの ID が必要です。

を取得していreturn value 0ます。

public int newid { get; set; }

public void CreateAlbum(string _titel, string _name, string _thumb, int _userid)
{
    objCMD = new SqlCommand(@"INSERT INTO tblFotoalbum 
                                  (fldAlbumHead, fldAlbumName, fldAlbumThumb, fldUserID_FK)
                              VALUES 
                                  (@titel, @name, @thumb, @userid);

                              SET @newid = SCOPE_IDENTITY()");

    objCMD.Parameters.AddWithValue("@titel", _titel);
    objCMD.Parameters.AddWithValue("@name", _name);
    objCMD.Parameters.AddWithValue("@thumb", _thumb);
    objCMD.Parameters.AddWithValue("@userid", _userid);
    objCMD.Parameters.AddWithValue("@newid", newid);

    objData.ModifyData(objCMD);       
}
4

7 に答える 7

3

@newid使用している sql ステートメントを考えると、出力パラメーターとして構成する必要があります。

var newIdParam = objCMD.Parameters.Add("@newid", SqlDbType.Int32)
newIdParam.Direction = ParameterDirection.OutPut;

次に、ExecuteNonQuery を使用してコマンドを実行します。その後、ouptut パラメータを読み取ることができます。

objCmd.ExecuteNonQuery();
int newId = Convert.ToInt32(newIdParam.Value);

編集:ModifyData メソッドが接続プロパティを設定し、ExecuteNonQuery を呼び出すと思うので、コードは次のようになります。

objData.ModifyData(objCMD);      
int newId = Convert.ToInt32(newIdParam.Value);
于 2015-02-20T11:26:53.390 に答える
0

推奨される解決策(および私の知る限り、唯一の本当に安全な解決策)は、次のOUTPUT例のように句を使用することです。

DECLARE @newIdTable(newid INT);
INSERT INTO table(...) OUTPUT INSERTED.ID INTO @newIdTable VALUES (...);
SELECT TOP 1 newid FROM @newIdTable;

これをストアド プロシージャに入れてExecuteScalar、最後に選択した値を返す を使用して呼び出すことをお勧めします。

于 2015-02-20T11:17:43.327 に答える