Вызовите хранимую процедуру SQL в ASP.NET с выходным параметром - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь вызвать мою хранимую процедуру 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 имеет тип date.

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

1 Ответ

2 голосов
/ 22 марта 2019

Ваша проблема с использованием имени параметра; вы использовали @RaceDates для хранимой процедуры, но вы пытаетесь использовать @RaceDate для кода. Они должны совпадать.

Кроме того, вам нужно добавить второй параметр в ваш код следующим образом;

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

и после cmd.ExeCuteNonQuery();

string location = Command.Parameters["@Location"].Value.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...