1

ユーザーが送信したばかりの情報を含む別のページにユーザーを転送できるように、レコードの ID を取得する必要があります。これに関する他の質問を見て、人々は SELECT SCOPE_IDENTITY() または OUTPUT を使用することを提案しましたが、私は c# と SQL に本当に慣れていないので、既存のコードでそれを使用する方法が正確にはわかりません。どんな援助でも大歓迎です。

先ほど挿入したレコードの ID を response.redirect に入れる必要があることがわかります。

pcn.Open();
pcm.Connection = pcn;

string logon_user = Request.ServerVariables["LOGON_USER"].Substring(7);

var sql = String.Format(@"INSERT INTO Transfer (Status, Type, Name) values ('{0}','{1}','{2}')", '0', TypeTxtBox.Text.Replace("'", "''"), logon_user);

pcm.CommandText = sql;
pcm.ExecuteNonQuery();
pcn.Close();

Response.Redirect("View.aspx?ID=" + id);

ええ、これに似た質問が他にもあるようですが、上記のコードで正確なヘルプを探しています。この重複をマークしないでください。

4

3 に答える 3

3

まず、パラメータ化された SQL を読んでください。SQL インジェクションに陥る可能性がはるかに高いため、SQL に文字列連結を使用しないでください。

ID を取得するには、コードを次のように更新する必要があります。

pcm.CommandText = "INSERT INTO Transfer (Status, Type, Name) values (@status, @type, @name);SELECT SCOPE_IDENTITY();";
object identifier = pcm.ExecuteScalar();

識別子が整数の場合はidentifier、int にキャストして値を取得できます (Guid などに応じて調整します)。

int id = (int)identifier;
于 2013-03-12T16:10:39.450 に答える
0

ExecuteNonQuery の代わりに ExecuteScalar を使用する必要があります。ID を取得するにはさまざまな方法がありますが、SCOPE_IDENTITY() を使用します。

ここで MSDN の例を見ることができます: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

于 2013-03-12T16:10:37.387 に答える
0

SCOPE_IDENTITYスコープ内の ID 列に挿入された最後の ID 値を取得します。 SqlCommand.ExecuteScalarスクリプトを実行し、ID を取得します。

        var sql = String.Format(@"INSERT INTO Transfer (Status, Type, Name) values ('{0}','{1}','{2}')  
        SELECT CAST(scope_identity() AS int)"
    , '0', TypeTxtBox.Text.Replace("'", "''"), logon_user);

int ID = (int)pcm.ExecuteScalar();
于 2013-03-12T16:10:44.610 に答える