【问题标题】:Call a SQL stored procedure in ASP.NET with an output parameter在 ASP.NET 中使用输出参数调用 SQL 存储过程
【发布时间】: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

【问题讨论】:

标签: c# sql asp.net sql-server stored-procedures


【解决方案1】:

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

此外,您需要像这样在代码中添加第二个参数;

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

在cmd.ExeCuteNonQuery();之后

string location = Command.Parameters["@Location"].Value.ToString();

【讨论】:

  • 遇到数据类型错误:“无法从 system.datetime 转换为 int”。 DateTime RaceDate = Calendar1.SelectedDate; Command.Parameters.Add("@RaceDates", SqlDbType.DateTime, RaceDate);
  • 你在哪里使用 int 类型?我看不到,在代码的任何地方都使用 int,请仔细检查
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
相关资源
最近更新 更多