我试图从存储过程中获取值,下面是我的代码
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#代码时,它是空值,为什么?什么错误的代码
答案 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。