【发布时间】:2017-11-20 04:04:36
【问题描述】:
我正在尝试从我的代码中执行此查询
using (SqlCommand usageMapCmd = new SqlCommand())
{
usageMapCmd.Connection = sqlConnection;
usageMapCmd.CommandType = CommandType.Text;
usageMapCmd.CommandText = "INSERT [dbo].[Analytics_DeviceLog] ([IPAddress], [OS], [OSVersionMajor], [OSVersionMinor], [City], [Country], [CountryCode], [Region], [RegionCode], [PostalCode], [TimeZone], [Browser], [BrowserVersionMajor], [BrowserVersionMinor], [Device], [Model], [Platform], [Latitude], [Longitude], [Languages], [UserGuid], [LoginTimeUtc], [LocationAccuracy]) VALUES (N'119.15.106.186', N'Windows 10', NULL, NULL, N'Canberra', N'Australia', N'AU', N'Australian Capital Territory', N'ACT', N'2600', N'Australia/Sydney', N'@Browser', 60, CAST(0.00 AS Decimal(18, 2)), N'@Device', N'', N'WinNT', CAST(-35.305000 AS Decimal(9, 6)), CAST(149.141200 AS Decimal(9, 6)), N'en-US,en;q=0.8,vi;q=0.6', N'99999999-9999-9999-9999-999999999999', CAST(N'@LoginTimeUtc' AS DateTime), N'Low')";
usageMapCmd.Parameters.AddWithValue("@Browser", (string)browsers[rndBrowsers.Next(browsers.Count)]);
usageMapCmd.Parameters.AddWithValue("@Device", (string)devices[rndDevices.Next(devices.Count)]);
usageMapCmd.Parameters.AddWithValue("@LoginTimeUtc", loginTimeUtc.ToString("yyyy-mm-dd hh:mm:ss"));
usageMapCmd.ExecuteNonQuery();
}
我遇到的问题是无论我输入什么格式的@LoginTimeUtc都会出错
从字符串转换日期和/或时间时转换失败
奇怪的是当我从 SQL Server Management Studio 手动执行查询时,例如2017-08-21 05:45:52.830 这可以正常工作,所以我认为问题不是来自我的数据库。
我试过了。 DateTime.Parse(loginTimeUtc) 但没有运气。我什至尝试用简单的DateTime.Now 替换loginTimeUtc.ToString("yyyy-mm-dd hh:mm:ss"),但效果不佳。知道我在这里可能做错了什么吗?
使用 SQL Server Profiler,这就是我得到的:
exec sp_executesql N'INSERT [dbo].[Analytics_DeviceLog] ([IPAddress], [OS], [OSVersionMajor], [OSVersionMinor], [City], [Country], [CountryCode], [Region], [RegionCode], [PostalCode], [TimeZone], [Browser], [BrowserVersionMajor], [BrowserVersionMinor], [Device], [Model], [Platform], [Latitude], [Longitude], [Languages], [UserGuid], [LoginTimeUtc], [LocationAccuracy]) VALUES (N''119.15.106.186'', N''Windows 10'', NULL, NULL, N''Canberra'', N''Australia'', N''AU'', N''Australian Capital Territory'', N''ACT'', N''2600'', N''Australia/Sydney'', N''@Browser'', 60, CAST(0.00 AS Decimal(18, 2)), N''@Device'', N'''', N''WinNT'', CAST(-35.305000 AS Decimal(9, 6)), CAST(149.141200 AS Decimal(9, 6)), N''en-US,en;q=0.8,vi;q=0.6'', N''99999999-9999-9999-9999-999999999999'', N''@LoginTimeUtc'', N''Low'')',N'@Browser nvarchar(6),@Device nvarchar(17),@LoginTimeUtc datetime',@Browser=N'Chrome',@Device=N'Samsung Galaxy S4',@LoginTimeUtc='2009-02-19 21:56:00'
【问题讨论】:
-
你的代码中
loginTimeUtc的类型是什么? -
@un-lucky 它是 DateTime 类型
-
您可以将日期参数插入为 DateTime 类型。您不需要将其转换为字符串
-
您正在从对象 C#
System.DateTime转换为 String,然后在您的更新中,您再次转换回 SQL DateTime,只需删除您的演员表,然后删除您的ToString() -
@JackyI 已删除 CAST AS DateTime 和 ToString("yyyy-mm-dd hh:mm:ss") 但仍然出现相同的错误
标签: c# .net sql-server datetime