无法从存储过程中获取值

时间:2018-04-23 08:17:46

标签: c# sql

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

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

1 个答案:

答案 0 :(得分:4)

即使您在“存储过程”声明中没有参数,也需要为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。