【问题标题】:Datetime conversion in web applicationWeb 应用程序中的日期时间转换
【发布时间】:2017-03-30 11:04:49
【问题描述】:

我有一个使用 SQL Server 2012 作为数据库的 asp.net Web 应用程序。

网络服务器当前具有美国日期时间格式。 Web 应用程序的代码将日期时间值作为 NOW 传递,一切正常。

现在我尝试使用干净的机器部署这个 Web 应用程序(用于内部测试)。 Web 应用程序再次正常工作。当我尝试将日期时间值传递给 SQL Server 时,问题就出现了。错误是

将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围

为了解决这个问题,我将机器的日期时间格式更改为美国日期时间格式,因为这是第一台服务器所做的。不幸的是,它仍然没有运行。

任何想法我都可以尝试什么?

更新我的代码

我的 SQL Server 有用户定义的类型

MyDataTable.Rows.Add(
                    batchNoRow[0], //Batch ID
                    DateTime.Now, //Creation Date
                    );

// Then pass the table type in a stored procedure as below

SqlParameter param = new SqlParameter("@Array", MyDataTable);
SqlCommand cmd = new SqlCommand(); 
cmd.connection = myconnection;
cmd.CommandText = mycommandText;
cmd.CommandType = commandType;
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();

@array的定义是sql server中用户定义的类型

CREATE TYPE [dbo].[MyTableType] AS TABLE(
    [BatchNo] [int] NOT NULL,
    [CreationDate] [datetime] NOT NULL,
  PRIMARY KEY CLUSTERED 
(
   [BatchNo] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO

【问题讨论】:

  • 一些代码会有所帮助
  • 将 datetime 结构的实例传递给 sql server,这样你就完全不用担心字符串表示默认格式的东西了。
  • 将数据库中的数据存储为 DateTime 而不是字符串。
  • SELECT convert(datetime, cast(value as varchar),104)
  • 你的 c# DataTable (MyDataTable) 的列定义是什么?

标签: c# asp.net sql-server datetime


【解决方案1】:

假设您有 DataTable 设置如下:

var MyDataTable = new DataTable();
MyDataTable.Columns.Add("BatchNo");
MyDataTable.Columns.Add("CreationDate");

不指定DataTable中添加的列的数据类型,DataColumn默认数据类型为String(see MSDN reference)

数据列 (DataColumn) 使用默认数据类型创建 字符串。

因此,DateTime.Now 返回的值存储为日期字符串,然后转换为 SQL 为nvarchar,从而抛出SqlException,因为 TVP 中的目标CreationDate 列声明为datetime

为确保传递的值具有正确的数据类型,请为 DataTable 中的每一列指定数据类型,如下所示:

MyDataTable.Columns.Add("BatchNo", typeof(int));
MyDataTable.Columns.Add("CreationDate", typeof(DateTime));

注意:在DataTable 填充数据后,您无法更改或更改DataType,因此必须在添加行之前为每一列指定DataType )。

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 2014-04-22
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多