C# web应用中的日期时间转换
我有一个使用SQL Server 2012作为数据库的asp.net web应用程序 web服务器当前采用美国日期时间格式。web应用程序的代码像现在一样传递日期时间值,并且一切正常 现在我正试图通过使用干净的机器(用于内部测试)来部署这个web应用程序。web应用程序再次正常工作。当我尝试将日期时间值传递给SQL Server时,出现了问题。错误是 nvarchar数据类型转换为datetime数据类型导致值超出范围 为了解决这个问题,我将机器的日期时间格式更改为美国日期时间格式,因为第一台服务器就是这样做的。不幸的是,它仍然没有运行 有什么想法吗?我能试一下吗 更新我的代码 我的SQL Server具有用户定义的类型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数据类型导致值超出范围 为了解决这个问题,我将机器的日期时间格式更改为美国日期时间格式,因为第一台服
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中的targetCreationDate
列声明为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
)的列定义是什么?