【问题标题】:Call MySql stored procedure which take 2 parameters from asp.net core 2.2 web API controller调用从 asp.net core 2.2 web API 控制器获取 2 个参数的 MySql 存储过程
【发布时间】:2020-02-18 13:41:54
【问题描述】:

什么是调用具有 2 个参数的存储过程并返回包含 10 列和 403 条记录的结果的正确方法。

下面是我写的代码。

try
{

    string startDate = procedureResource.StartDate.ToString("yyyy-MM-dd") + " 00:00:00";
    string endDate = procedureResource.EndDate.ToString("yyyy-MM-dd") + " 23:59:59";

    var FromDate = new MySqlParameter("@FromDate", startDate);
    var ToDate = new MySqlParameter("@ToDate", endDate);
    var financial = context.Query<FinancialResource>().FromSql("EXECUTE GetChargesFromToDate @FromDate,@ToDate", FromDate, ToDate).ToList();
    return financial;


}
catch(Exception ex) { Console.Write(ex);throw ex; }

这里是个例外

{"您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在 ''2019-09-28 00:00:00','2019-10- 附近使用的正确语法04 23:59:59'' 在第 1 行"}

【问题讨论】:

  • 尝试改用FromSql("CALL GetChargesFromToDate(@p0, @p1)", startDate, endDate)

标签: c# mysql stored-procedures entity-framework-core asp.net-core-webapi


【解决方案1】:

尝试将 startDate 和 endDate 变量声明为 DateTime 而不是字符串。您可能正在发送您的 SQL 提供程序不接受的日期/时间格式。

您可以尝试这样的事情(我假设 procedureResource.StartDate/EndDate 属于 DateTime 类型):

DatetTime startDate = procedureResource.StartDate.Date;
DateTime endDate = procedureResource.EndDate.Date.Add (new TimeSpan (23, 59, 59));

【讨论】:

  • 好的先生,但我想要这个格式 2019-10-04 00:00:00 如何将日期时间类型转换为这个格式
  • 先生,procedureResource.StartDate/EndDate 都是 DateTime 类型,我尝试了相同的语法,但又出现了一个新错误
  • have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'timestamp('2019-09-28 00:00:00.000000'),timestamp('2019-10-04 23:59:59.000000')' at line 1
  • 添加时间戳后,它将附加毫秒以及“timstamp”,但我不想要所有这些我想要这个格式'2019-09-28 00:00:00','2019-09-28 23:59:59'我该怎么做。
  • 可以分享一下GetChargesFromToDate存储过程吗?
【解决方案2】:
`try
        {
            var fromDate = resource.StartDate.ToString("yyyy-MM-dd") + " 00:00:00";
            var toDate = resource.EndDate.ToString("yyyy-MM-dd") + " 23:59:59";
            string connectionstring = "Server=dbwithriderinstance.crefat3b9j9c.ap-southeast-1.rds.amazonaws.com;Database=dborderstage;User=stagging_su_production_s;Password=85s2!892Stfe7";
            using (MySqlConnection con = new MySqlConnection(connectionstring))
            {
                using (MySqlCommand cmd = new MySqlCommand("GetChargesFromToDateV2", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@FromDate", fromDate);
                    cmd.Parameters.AddWithValue("@ToDate", toDate);
                    using (MySqlDataAdapter dbr = new MySqlDataAdapter(cmd))
                    {
                        DataTable dt = new DataTable();
                        dbr.Fill(dt);
                        return dt;
                    }
                }
            }
        }
        catch (Exception ex) { Console.Write(ex); throw ex; }
    }`

【讨论】:

  • 它是一种旧的调用过程的方式,但它对我有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2018-02-14
  • 2021-08-26
  • 1970-01-01
  • 2022-01-06
相关资源
最近更新 更多