gpt4 book ai didi

c# - 使用 C# 的输出参数运行存储的 SQL 过程

转载 作者:行者123 更新时间:2023-11-30 16:23:20 25 4
gpt4 key购买 nike

我意识到这个问题之前已经得到了回答,我已经查看了答案,试图找到我的方法的错误,但处于停滞状态。我有以下应该返回唯一键的存储过程。

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 返回为空,结果为 -1,暗示运行该过程时出错。如果有人看到我可能做错了什么,我将不胜感激。

请注意:我无法编辑实际过程,因为有几个类已经在使用它。

非常感谢您的帮助。

最佳答案

我会尝试改变这一行:

command.Parameters.Add(new SqlParameter("@ioffset",1)); 

SqlParameter pOffset = command.Parameters.Add( new SqlParameter("@ioffset", SqlDbType.Int)); 
pOffset.Value = 1;

您正在使用的构造函数中存在一个已知错误。看community comments on MSDN
新方法 SqlParameter.AddWithValue 在一定程度上解决了这个问题,该方法消除了标准构造函数的歧义

关于c# - 使用 C# 的输出参数运行存储的 SQL 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11657140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com