C# 使用输出参数调用ASP.NET中的SQL存储过程

C# 使用输出参数调用ASP.NET中的SQL存储过程,c#,sql,asp.net,sql-server,stored-procedures,C#,Sql,Asp.net,Sql Server,Stored Procedures,我试图调用我的sql存储过程,它将RaceDate作为输入,并将Location作为输出返回。我不知道如何在ASP.NET中调用我的代码,这就是我目前所拥有的 DateTime RaceDate = Calendar1.SelectedDate; // string RaceDate = TxtBoxCalendar.Text; TxtBoxCalendar.ReadOnly = true; SqlConnection con = new SqlConnection(

我试图调用我的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

关于使用参数名的问题;您已在存储过程中使用了
@RaceDate
,但尝试在代码中使用
@RaceDate
。。它们应该是一样的

另外,您需要像这样向代码中添加第二个参数

Command.Parameters.Add("@Location",SqlDbType.String).Direction = ParameterDirection.Output;
cmd.ExeCuteNonQuery()之后


使用Add方法而不是AddWithValue,然后指定参数的方向。在不同的注释上,如果没有返回任何行,则
@Location
的值将为
NULL
,如果不运行查询,则会这样做。不需要使用
IF
语句。为什么要将日期从选择器转换为字符串,然后再转换回SP的日期?获取数据类型错误:“无法从system.datetime转换为int”。DateTime RaceDate=Calendar1.SelectedDate;添加(“@RaceDates”,SqlDbType.DateTime,RaceDate);在哪里使用int类型?我看不见,在任何地方使用int代码,请仔细检查
string location = Command.Parameters["@Location"].Value.ToString();