【问题标题】:Passing date from calendar into stored procedure but getting date as NULL将日期从日历传递到存储过程但将日期设为 NULL
【发布时间】:2019-05-23 10:05:08
【问题描述】:

我将 fromdatetodate 从 ASP.NET 代码传递到 SQL Server,但在此过程中,我得到两个日期的空值。

ASP.NET 代码:

using (SqlCommand cmd = new SqlCommand("PRRNASTIEDOWNLOAD_Client", sqlConn))
{
    cmd.Parameters.AddWithValue("@FROMDATE", System.DateTime.Now.ToString("yyyy-mm-dd", System.Globalization.CultureInfo.InvariantCulture));
    cmd.Parameters.AddWithValue("@TODATE", System.DateTime.Now.ToString("yyyy-mm-dd", System.Globalization.CultureInfo.InvariantCulture));

    if (sqlConn.State != ConnectionState.Open)
    {
        sqlConn.Open();
    }

    SqlDataReader rdr = cmd.ExecuteReader();
    dt.Load(rdr);
}

但我在程序中将日期值设为 null

【问题讨论】:

  • 不要将您的日期转换为字符串只是为了将它们传递到存储过程中!!!在存储过程接口中将参数定义为DATEDATETIME,然后在C#中将它们作为DATETIME传递!
  • 不相关提示:SqlDataReader 是 IDisposable 所以应该在using 块中。您可能想阅读can we stop using AddWithValue
  • 嗨,我知道你是新来的。如果您认为某个答案解决了问题,请通过单击答案旁边的灰色复选标记将其标记为“已接受”。检查此链接以了解接受答案的工作原理:meta.stackexchange.com/questions/5234/…

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


【解决方案1】:

您需要像这样指定命令的类型:

cmd.CommandType = CommandType.StoredProcedure;

您需要指定调用的是存储过程而不是简单的命令文本。也可以看看: When executing a stored procedure, what is the benefit of using CommandType.StoredProcedure versus using CommandType.Text?

您还需要使用Add 而不是AddWithValue 来准确了解传递给SP 的参数类型,如下所示:

cmd.Parameters.Add("@FROMDATE", System.Data.SqlDbType.DateTime).Value = System.DateTime.Now;

以下文章也可能很有趣:

Can we stop using AddWithValue() already?

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 2014-07-27
    • 2012-05-08
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多