8

行を挿入して、次のような新しい行の ID を取得しようとしています。

INSERT INTO blah....;
SELECT @@IDENTITY as NewID;

C# で DbCommand オブジェクトを 1 回呼び出すだけで両方のステートメントを実行しようとしていますが、うまくいかないか、何か問題があります。

Compact Edition はバッチでの複数のステートメントの実行をサポートしていないことを読みましたが、次のこともわかりました。

複数のクエリを同時に実行する場合は、ステートメントごとに改行文字を含め、各ステートメントの末尾にセミコロンを含める必要があります。

ソース: http://technet.microsoft.com/en-us/library/bb896140(SQL.110).aspx

それで、それは機能するかどうか...もしそうなら、私は何が欠けていますか?

(私は 2 つのコマンドを実行でき、それは正常に動作することを認識していますが、何か不足しているのではないかと思います)。

4

3 に答える 3

8

これはドキュメント エラーのように見えますが、その逆です。ExecuteNonQuery 呼び出しごとに実行できるステートメントは 1 つだけです。

于 2011-04-06T06:39:35.133 に答える
3

ID 値を取得するには、出力パラメーターを定義する必要があります

sqlCommand Command = Conn.CreateCommand();
Command.CommandText = "insert into MyTable(Value1,Value2) values(MyValue,MyValue)"
Command.ExecuteNonQuery();
Command.CommandText = "select @ID = @@IDENTITY"
SqlParameter ID = new SqlParameter("@ID", SqlDbType.Int);
ID.Direction = ParameterDirection.Output;
Command.Parameters.Add(ID);
Command.ExecuteNonQuery();
int NewID = (int)ID.Value;
于 2011-04-06T07:03:22.233 に答える
0

sql-server-ceDirection could not be Output などの多くのエラーの後、これを機能させました。

public static long GetIdentity(this IDbConnection connection)
{
    var cmd = connection.CreateCommand();
    cmd.CommandText = "SELECT @@IDENTITY";
    cmd.CommandType = CommandType.Text;
    var id = cmd.ExecuteScalar();
    return (long)(decimal)id;
}
于 2016-10-10T15:29:29.140 に答える