【问题标题】:C# database save add line break to datetimeC# 数据库保存添加换行符到日期时间
【发布时间】:2015-11-28 02:53:07
【问题描述】:

我遇到了一个问题,ExecuteScalar 正在向数据库发送一些 datetime 参数并且我收到错误

将 nvarchar 转换为日期时间无效

SQL Server Profiler 显示 datetime 在日期中间有一个换行符,如下所示:

@inspection_start='2015-09-10 /n
00:00:00',

我已检查所有数据类型是否正确。

有谁知道什么会导致这个问题?

谢谢

【问题讨论】:

  • 也许可以分享一些代码...?
  • OK 数据类型正确。您在 nvarchar 中有一个换行符。这不会转换为日期时间。
  • 数据类型不正确。您有日期时间数据,但出于某种奇怪的原因,您将其作为字符串 (nvarchar) 传递,从而为您所描述的问题打开了机会。如果您将此数据 作为 datetime 数据传递,则不会出现问题。
  • @Damien_The_Unbeliever OP 声明向数据库发送了一些日期时间参数。
  • @Frisbee - 是的,但它们显然发送日期时间参数,因为它们不可能包含换行符。如果他们正在发送日期时间参数,作为日期时间,他们将作为二进制 blob 传递。

标签: c# sql-server tsql datetime


【解决方案1】:

首先,

将 nvarchar 转换为日期时间无效

告诉我您发送的是string 而不是DateTime,如果您在SQL 中将@inspection_start 声明为DateTime,那么这应该适合您:

// oldInspection_start is the var you already have (inspection_start) 
// with the line break (\n)
string oldInspection_start = "2015-09-10 /n 00:00:00"; 
string newInspection_start = oldInspection_start.Replace("/n", string.Empty);
yourCommand.Parameters.AddWithValue("@inspection_start", Convert.ToDateTime(newInspection_start));

你的代码应该是相似的,所以你可以随意改变它

【讨论】:

    【解决方案2】:

    如果其数据类型是字符串,则尝试删除/替换 '\n' 字符。你能粘贴你如何传递参数和调用 ExeculteScalar 方法的代码吗?

    【讨论】:

      【解决方案3】:

      我的变量声明

      public DateTime? InspectionStart
      

      这就是我调用程序的方式

      int newid = 0;
                  try
                  {
                      Database db = DatabaseFactory.CreateDatabase();
                      newid = (int)db.ExecuteScalar(
                          StoredProcedures.SaveInspectionPortNewReport,
                          inspection.InspectionStart)
                   }
      

      这就是我在 sql 中接收它的方式

      ALTER PROCEDURE [dbo].[inspection_port_new_reports_save](
       @inspection_start datetime
      )
      

      类型肯定是日期时间。调试器显示它应该的日期时间。只是一个简单的日期时间

      【讨论】:

      • 跟随调试器进入executeScalar-method及以后,参数被转换为字符串的地方。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2013-04-03
      相关资源
      最近更新 更多