私はいくつかのパラメータを挿入し、挿入されたID
を返す私のサーバ上にストアドプロシージャを持っています。私はこれを簡単に行うフォームを書いていますが、私は戻って渡されるパラメータを取得するように見えません。C#SQLストアドプロシージャ(挿入) - パラメータを渡してパラメータを取得する
おそらく無意味な読書を一からやっていないように、私のC#コードに注意を払い、パラメータを渡して返すために何が必要なのかを教えてください。
C#Default.aspxの
connection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionInfo"]);
sql = "aStoredProc";
command = new SqlCommand(sql, connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameter.Add(new SqlParameter("@FirstName", SqlDbType.VarChar)).Value = sFirstname;
command.Parameter.Add(new SqlParameter("@SurName", SqlDbType.VarChar)).Value = sSurname;
connection.Open();
int ID = command.ExecuteNonQuery();
connection.Close();
SQL aStoredProc
IF EXISTS(SELECT * FROM aTable WHERE ID = @ID)
-- User exists, update details
BEGIN
BEGIN TRAN
UPDATE aTable
SET
FirstName = @FirstName,
SurName = @SurName,
LastUpdate = GetDate()
WHERE ID = @ID
IF (@@Error != 0)
ROLLBACK TRAN
ELSE
COMMIT TRAN
END
ELSE
-- New user
BEGIN
BEGIN TRAN
INSERT aTable (
FirstName,
SurName,
GetDate()
)
VALUES (
@FirstName,
@SurName,
@LastUpdate
)
SELECT @ID = @@IDENTITY
IF (@@Error != 0)
ROLLBACK TRAN
ELSE
COMMIT TRAN
END
パラメータ@ID
は次のようにストアドプロシージャに記載されている:
@ID (int, Input/Output, No default)
procは 'Return integer'を持ちます。これは、SQL Server 2005をアップグレードする前にVBAソリューションで正常に動作していました。
ありがとうございます。あなたはパラメータコレクションに出力PARAMTERを追加する必要が
http://stackoverflow.com/questions/8633821/を参照してください:
これは好きではscope-identity-always-returning-0/8633835#8633835同様の質問/回答です。 –
あなたはストアドプロシージャにロジックの欠陥があります。 (else 'new user'ブランチ):@@ ERRORを検査する前に実行されているステートメントは@@ ERRORをリセットします –
新しく挿入されたIDを取得するために何かの代わりに** SCOPE_IDENTITY()を使用することをお勧めします値。 [WHYの説明については、このブログの記事を参照してください](http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity -of-record /) –