gpt4 book ai didi

c# - 无法从存储过程中获取值

转载 作者:行者123 更新时间:2023-11-30 15:16:17 26 4
gpt4 key购买 nike

我正在尝试从存储过程中获取值,下面是我的代码

SqlConnection connection = new SqlConnection("");
connection.Open();
DataTable timeZoneDt = new DataTable();
var sqlCommand = new SqlCommand("GetTimeZoneGMT", connection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add("@TimeZone", SqlDbType.NVarChar).Value = "Asia/Kuala_Lumpur";
//timeZoneDt.Load(sqlCommand.ExecuteReader());
//new SqlDataAdapter(sqlCommand).Fill(timeZoneDt);

var reader2 = sqlCommand.ExecuteReader();


while (reader2.Read())
{
var ID = int.Parse(reader2[0].ToString());
}
connection.Close();

下面是我的存储过程,

/****** Object:  StoredProcedure [dbo].[GetTimeZoneGMT]    Script Date: 23/4/2018 4:05:46 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[GetTimeZoneGMT]
@TimeZone NVARCHAR(128)
AS
BEGIN
DECLARE @timeZoneNumber as INT = -20;
IF @TimeZone ='Pacific/Midway'
SET @timeZoneNumber = -11
ELSE IF @TimeZone ='Pacific/Niue'
SET @timeZoneNumber = -11
ELSE IF @TimeZone ='Pacific/Pago_Pago'
SET @timeZoneNumber = -11

RETURN @timeZoneNumber;
END

我不能全部写给你们,因为时区有 400 行,但是它是这样的。

但是,当我得到我的 C# 代码时,它是空值,为什么?代码有什么问题

Screenshot Visual Studio

最佳答案

您需要为 ReturnValue 声明一个参数,即使您的存储过程声明中没有它。您可以随意命名参数,但应将其标记为 ParameterDirection.ReturnValue

SqlParameter r = cmd.Parameters.Add("@timeZoneNumber", SqlDbType.Int);
r.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();

int result = Convert.ToInt32(r.Value);

请注意,您不需要调用 ExecuteReader,只需调用 ExecuteNonQuery。

关于c# - 无法从存储过程中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49976367/

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