2012-03-10 3 views

答えて

1
objCommand.Connection = objConnection; 
      objCommand.CommandText = "INSERT INTO Moin " + 
       " (Title, TotalID, Code) " + 
       "VALUES (@Title , @TotalID, @Code) SELECT SCOPE_IDENTITY()"; 
object id = objCommand.ExecuteScalar(); 
0

ビルSQLコマンド文字列内のレガシー技術検討する必要があります。ここでは

は、挿入コードです。 Entity Frameworkまたはlinq-to-sqlを使用すると、IDの取得は自動的に処理されます。

純粋なSQLでは、SCOPE_IDENTITY()関数を使用して、挿入された要素のIDを取得します。

1

クエリでSQL ServerのOUTPUT clauseを使用してみてください - それだけで挿入された値のいずれかを返すことができます(ここで私はあなたの列がID呼ばれると仮定しています - 必要に応じて適応):

objCommand.Connection = objConnection; 
objCommand.CommandText = "INSERT INTO Moin(Title, TotalID, Code) " + 
         "OUTPUT Inserted.ID " + 
         "VALUES (@Title , @TotalID, @Code); " 

し、このようにそれを実行します。あなただけの1行1列(ちょうどINT)を返すしているので、あなたが取得するために.ExecuteScalar()を使用することができます

int result = (int)objCommand.ExecuteScalar(); 

その値はINSERTステートメントから戻ってきます。

OUTPUT句を使用すると、挿入されたばかりの値を返すことができます。したがって、データベースによって満たされた値をデフォルト値または必要なもので戻すこともできます。複数の値を返す場合は、データリーダーを使用してすべてを読み取る必要があります。ExecuteScalar()は、単一の値に対してのみ機能します。

しかし、Andersが正しく言及しているように、Entity FrameworkのようなORMを使用すると、自動的にこのすべてが処理されるため、未処理のSQLコマンドを処理する必要はありません。

関連する問題