SQL Server DateTime和C#DateTime
在我的SQL服务器上,我有一个非常简单的测试表,它只包含三行: ID
, Date
和Hours
。( varchar
, DateTime
, varchar
)。
SQL中的DateTime格式如下: yyyy-MM-dd HH:mm:ss.fff
。
C#中的DateTime格式如下: yyyy-dd-MM HH:mm:ss.fff
。
我使用以下代码来获取C#DateTime格式:
string ddd = "2012-10-10 00:00:00.000"; dt1 = DateTime.ParseExact(ddd, "yyyy-MM-dd HH:mm:ss.fff", null);
如果我尝试将其变成yyyy-dd-MM
我会收到错误:
日历时间由字符串表示,日历不支持。
在我的C#应用程序中,我正在尝试查找修整日期之间的总小时数。 我有点工作,但它只适用于01到12之间的日期。
因此,从2012-01-10
到2012-10-10
(十天)将从数据库中给我正确的总小时数。
但是当我写2012-01-10
到2012-14-10
(十四天)时,我收到一个错误:
将char数据类型转换为datetime数据类型导致超出范围“
先感谢您。
PS。 你能建议一个更简单的约会方式吗?
mySQL查询
string CommandText = "SELECT * FROM date_test WHERE id = '4' AND date BETWEEN '" + dt1 + "' AND '" + dt2 + "'";
我已经找到了问题,但没有找到解决方案。
问题是SQL数据库查看格式,并希望yyyy-MM-dd,但C#只能发送yyyy-dd-MM。
为什么ParseExact()
不能做yyyy-MM-dd?
日历时间由字符串表示,日历不支持。
由于您的C#应用程序将2012-14-10
日期视为第14th
个月, 10th
天和10th
2012th year
,因此会出现此错误。 找工作的日期和年份,但月份没有。 此外,不要尝试更改C#应用程序查看日期的方式,这取决于系统的文化。
您会混淆如何定义 DateTime
对象以及如何显示它。
由于您将日期存储为SQL中的DateTime
,因此我没有充分的理由相信您需要进行任何类型的解析。 请考虑以下代码示例。
var dataTable = new DataTable(); var dataAdapter = new SqlDataAdapter("SELECT * FROM YourTable", "{connection string}"); dataAdapter.Fill(dataTable); var yourDate = dataTable.Rows[0]["Date"]; <=== the type will be DateTime, simple.
添加参数
我们来看看你的示例查询:
“SELECT * FROM date_test WHERE id ='4'AND date BETWEEN'”+ dt1 +“'AND'”+ dt2 +“'”;
让我们稍微修一下,考虑下面的例子:
var dataTable = new DataTable(); var dataAdapter = new SqlDataAdapter("SELECT * FROM date_test WHERE id = @ID AND date BETWEEN @StartDate AND @EndDate", "{connection string}"); dataAdapter.SelectCommand.Parameters.AddWithValue("@ID", "4"); dataAdapter.SelectCommand.Parameters.AddWithValue("@StartDate", new DateTime(2012, 10, 1)); dataAdapter.SelectCommand.Parameters.AddWithValue("@EndDate", new DateTime(2012, 10, 14)); dataAdapter.Fill(dataTable); var yourDate = dataTable.Rows[0]["Date"]; <=== the type will be DateTime, simple.
您正在为SQL注入做好准备。
还看这里 。 有一个参数化查询的例子。