在我的SQL server上,我有一个非常简单的测试表,它只包含三行:ID、Date和Hours。(varchar、DateTime、varchar)。
SQL中的DateTime格式类似于:yyyy-MM-dd HH:mm:ss.fff。
DateTime格式在C#中类似于: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,就会得到一个错误:
日历不支持由字符串表示的DateTime。
在我的C#应用程序中,我试图找出分割日期之间的总时数。我让它起作用了,但它只适用于01到12岁的日期。
因此,就像从2012-01-10到2012-10-10 (10天)一样,从数据库中得到的总时数将是正确的。
但是,当我将2012-01-10写到2012-14-10 (14天)时,我得到了一个错误:
将char数据类型转换为日期时间数据类型会导致超出范围的“
提前谢谢你。
PS。你能给我一个更简单的约会方法吗?
mySQL查询
string CommandText = "SELECT * FROM date_test WHERE id = '4' AND date BETWEEN '" + dt1 + "' AND '" + dt2 + "'";我已经解决了问题,但没有找到解决办法。
问题是,SQL数据库查看格式,并希望使用yyyy,但是C#只能发送yyyy。
为什么ParseExact()不能做yyyy dd?
发布于 2012-09-24 11:24:28
日历不支持由字符串表示的DateTime。
出现此错误是因为您的C#应用程序将日期2012-14-10视为表示14th月、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.添加参数
让我们来看看您的示例查询:
“从date_test中选择*,其中id = '4‘,日期介于’+ dt1 +‘’和‘’+ 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.发布于 2012-09-24 11:26:55
你在为SQL注入做一个完美的准备。
还可以看看这里。有一个参数化查询的例子。
https://stackoverflow.com/questions/12563795
复制相似问题