C# web应用中的日期时间转换

C# web应用中的日期时间转换,c#,asp.net,sql-server,datetime,C#,Asp.net,Sql Server,Datetime,我有一个使用SQL Server 2012作为数据库的asp.net web应用程序 web服务器当前采用美国日期时间格式。web应用程序的代码像现在一样传递日期时间值,并且一切正常 现在我正试图通过使用干净的机器(用于内部测试)来部署这个web应用程序。web应用程序再次正常工作。当我尝试将日期时间值传递给SQL Server时,出现了问题。错误是 nvarchar数据类型转换为datetime数据类型导致值超出范围 为了解决这个问题,我将机器的日期时间格式更改为美国日期时间格式,因为第一台服

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

web服务器当前采用美国日期时间格式。web应用程序的代码像现在一样传递日期时间值,并且一切正常

现在我正试图通过使用干净的机器(用于内部测试)来部署这个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

假设您有
DataTable
设置,如下所示:

var MyDataTable = new DataTable();
MyDataTable.Columns.Add("BatchNo");
MyDataTable.Columns.Add("CreationDate");
如果不为在
DataTable
中添加的列指定数据类型,
DataColumn
默认假定数据类型为
String

数据列(DataColumn)是使用默认数据类型创建的 绳子

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

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

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

注意:在
DataTable
填充数据后,您不能更改或更改
DataType
,因此在添加行之前,必须为每个列指定
DataType
。某些代码将有助于将datetime结构的实例传递到sql server,通过这种方式,您根本不需要担心字符串表示默认格式的问题。将数据以DateTime而不是字符串的形式存储在数据库中。选择convert(DateTime,cast(值为varchar),104)c#DataTable(
MyDataTable
)的列定义是什么?