この質問は以前に回答されていることに気付きました。回答を調べて、自分のやり方の誤りを見つけようとしましたが、立ち往生しています。一意のキーを返す次のストアド プロシージャがあります。
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[newid] @tablename AS CHAR(10), @fieldname AS CHAR(15) = '', @ioffset AS INT, @theID as int = 0 output
AS
BEGIN
SET NOCOUNT ON
DECLARE @value AS INT
IF @ioffset < 1 SET @ioffset = 1
IF LEN(@fieldname) > 0
BEGIN
UPDATE id SET @value = CONVERT(INT,cvalue)+@ioffset-1, cvalue = CONVERT(CHAR,(CONVERT(INT,cvalue)+@ioffset)) WHERE UPPER(ctablename) = UPPER(@tablename) AND UPPER(cfieldname) = UPPER(@fieldname)
SELECT @value
END
ELSE
BEGIN
UPDATE id SET @value = CONVERT(INT,cvalue)+@ioffset-1, cvalue = CONVERT(CHAR,(CONVERT(INT,cvalue)+@ioffset)) WHERE UPPER(ctablename) = UPPER(@tablename)
SELECT @value
End
SET NOCOUNT OFF
set @theID = @value
END
次のコードを使用して、プロシージャにアクセスしようとしています。
using(SqlConnection connection = new SqlConnection(connectionString))
using(SqlCommand command = new SqlCommand("dbo.NewID", connection)
{ CommandType = CommandType.StoredProcedure } )
{
command.Parameters.Add( new SqlParameter("@tablename",table));
command.Parameters.Add( new SqlParameter("@fieldname",field));
command.Parameters.Add( new SqlParameter("@ioffset",1));
SqlParameter key = new SqlParameter("@theID", SqlDbType.Int);
key.Direction = ParameterDirection.Output;
command.Parameters.Add(key);
connection.Open();
result = command.ExecuteNonQuery();
connection.Close();
}
key.Value は空に戻り、result は -1 であり、プロシージャの実行中にエラーが発生したことをほのめかしています。私が間違っているかもしれないことを誰かが見たら、助けていただければ幸いです。
注意: すでにいくつかのクラスで使用されているため、実際の手順を編集することはできません。
何卒よろしくお願い申し上げます。