0

私は.NETとSQLServerに比較的慣れていません。.NETからストアドプロシージャを実行して、auto_increment値を取り戻そうとしています。これは.NET(VB.NET)の私のコードです:

myComm.Parameters.AddWithValue("@newkey", newKey)
myComm.Parameters.AddWithValue("@newimg", DirectCast(imgByteArray, Object))
Dim resultReader As SqlDataReader = myComm.ExecuteReader
Dim resultId As Integer
While resultReader.Read
     resultId = resultReader.GetInt16("@returnid")
End While

そして、これは私のストアドプロシージャです。

-- Add the parameters for the stored procedure here
@newkey nvarchar(MAX),
@newimg varbinary(MAX),
@returnid integer = 0
AS
BEGIN

SET NOCOUNT ON;

INSERT INTO dbo.AmazonS3Preview(myKey,previewImage) VALUES (@newkey,@newimg)
SET @returnid=(SELECT @@IDENTITY AS [@@IDENTITY])
END

現在.NETでは常に「0」を取得してresultIdいますが、誰かが私が間違っていることを教えてもらえますか?

4

2 に答える 2

3

値を設定していますが、返していません。変数を設定する必要もありません。最後の行を作成します。

SELECT SCOPE_IDENTITY() as returnid

そして、ExecuteScalarを使用してreturnIdを取得する方法を見てください。

myComm.Parameters.AddWithValue("@newkey", newKey)
myComm.Parameters.AddWithValue("@newimg", DirectCast(imgByteArray, Object))
Dim resultId As Integer    
resultId = Convert.ToInt32(myComm.ExecuteScalar())
于 2013-01-30T17:41:06.137 に答える
0

ストアドプロシージャでは、パラメータreturnidを値に設定しています。ただし、コードでは、selectステートメントからの出力をキャプチャしています。ストアドプロシージャを次のように変更します。

-- Add the parameters for the stored procedure here
@newkey nvarchar(MAX),
@newimg varbinary(MAX)
AS
BEGIN

   SET NOCOUNT ON;

   INSERT INTO dbo.AmazonS3Preview(myKey, previewImage) 
   OUTPUT Inserted.ID 
   VALUES (@newkey, @newimg)
END

2つの変更。まず、returnidパラメーターを削除します。次に、SPのOutput句を使用してIDを取得します。これは、vb.netコードを変更しなくても機能するはずです。

于 2013-01-30T17:47:08.060 に答える