【问题标题】:User Defined Table Type Datetime conversion error用户定义表类型日期时间转换错误
【发布时间】:2021-04-13 12:20:53
【问题描述】:

到目前为止,我试图找到一个关于此的问题,但没有运气,所以我想我会问一次!

我有一个应用程序将用户定义的表类型传回 SQL 以在存储过程中使用(通过将类转换为表)。 日期为 '13/04/2021 00:00:00',将其传递到 SQL 中用户定义表的标准日期时间列中。

CREATE TYPE [dbo].[KeyData] AS TABLE(
    [Date] [datetime] NULL,
    [Time] [datetime] NULL,
    [UnknownDate] [bit] NULL,
    [DateReported] [datetime]  NULL 
)

从字符串转换日期和/或时间时出现“转换失败”的错误。 表值参数“@KeyData”的数据不符合参数的表类型。 我知道如果我只传递参数,我可以将存储过程中的参数转换为 103 类型(就像我在英国一样),但在将数据传递到定义的表类型时似乎出错了。

有什么想法吗?

编辑:我传递的两个字段在 C# 端都是可为空的日期时间,因为它们可能并不总是必需的。当它们为空且日期为 12/04/2021 时,它可以正常工作。

C# 类:

   public DateTime? Date { get; set; }
        public DateTime? Time { get; set; }
        public Boolean UnknownDate { get; set; }
        public DateTime DateReported { get; set; }

C#代码:

    using (SqlCommand cmd = new SqlCommand("MyProc", conn))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter test = cmd.Parameters.AddWithValue("@KeyData", 
 K.ToTable());
                    test.SqlDbType = SqlDbType.Structured;
                    test.TypeName = "KeyData";

                    conn.Open();
                    cmd.ExecuteScalar();
                    conn.Close();
                }

编辑 2:将时间转换为时间跨度,仍然出现错误。我相信它在 DateReported 周围是 '13/04/2021', 12/04/21 工作正常。看起来它试图将它作为 mm/dd/yyyy 传递。有什么想法吗?

【问题讨论】:

  • 另外,为什么你有一个名为date的列,还有一个名为time的列,但它们都是datetimedatetime 数据类型不是更合适吗?
  • 听起来您正在传递一个包含您的日期时间的字符串参数,并希望将其转换为 sql 数据时间列。而是将存储过程中的参数设为日期时间,并在应用程序中将字符串转换为日期时间,然后将其传递给 sql。
  • 在 Webforms 和 C# 中发布此内容的主要原因是,可能有更多 C# 知识的人建议在 Webform 上而不是 SQL 端调整日期格式。编辑:两者都是我通过的类中的可空日期时间。我会在帖子中包含该信息
  • @Lambey,我怀疑您的 C# 查询没有参数化。 Use parameters,具有匹配的数据类型,我敢打赌问题会得到解决。
  • @DanGuzman 编辑显示我的代码

标签: c# sql sql-server


【解决方案1】:

对于遇到此问题的任何人,在将类转换为数据表时,日期时间上没有声明 DataType。通过将这些声明为日期时间,它成功转换。

对于将日期时间添加到要传递的数据表的列,请确保在列上使用以下内容。

dc.DataType = System.Type.GetType("System.DateTime");

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    相关资源
    最近更新 更多