【发布时间】:2019-08-13 13:03:25
【问题描述】:
我正在尝试调用我的 sql 存储过程,它将 RaceDate 作为输入并返回 Location 作为输出。我不确定如何在 ASP.NET 中调用我的代码,这就是我目前所拥有的。
DateTime RaceDate = Calendar1.SelectedDate;
// string RaceDate = TxtBoxCalendar.Text;
TxtBoxCalendar.ReadOnly = true;
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ToString();
con.Open();
SqlCommand Command = new SqlCommand();
Command.CommandType = System.Data.CommandType.StoredProcedure;
Command.CommandText = "CheckRaceCalendarDates";
Command.Parameters.Add("@RaceDate", SqlDbType.DateTime, RaceDate);
Command.Parameters.Add("@Location", SqlDbType.String).Direction = ParameterDirection.Output;
Command.Parameters.Add("@Location",SqlDbType.String).Direction = ParameterDirection.Output;
Command.ExecuteNonQuery();
con.Close();
我想我也可能遇到数据类型的问题。 RaceDate 是用户在日历中单击的日期,必须将其转换为字符串,但 SQL 参数 RaceDate 的类型为日期。
CREATE PROCEDURE [dbo].[CheckRaceCalendarDates]
@RaceDates DATE,
@Location NVARCHAR(50) OUTPUT
AS
IF EXISTS
(
SELECT
RaceCalendar.RaceDates,
Locations.LocationName
FROM
Locations
INNER JOIN RaceCalendar ON locations.LocationId = RaceCalendar.LocationId
WHERE
RaceCalendar.RaceDates = @RaceDates
)
BEGIN
SELECT
@Location = Locations.LocationName
FROM
Locations
INNER JOIN RaceCalendar ON locations.LocationId = RaceCalendar.LocationId
WHERE
RaceCalendar.RaceDates = @RaceDates
END
【问题讨论】:
-
使用Add方法代替AddWithValue,然后指定参数的方向。
-
另外,如果没有返回任何行,那么
@Location的值将是NULL,如果查询没有运行它会这样做。不需要IF声明。 -
为什么要将日期从选择器转换为字符串,然后再转换为 SP 的日期?
标签: c# sql asp.net sql-server stored-procedures