use*_*775 2 c# t-sql sql-server datetime datetime-format
此代码计算MSSQL表中的记录数,其中日期介于今天的日期和今天的日期+ 8天之间,但它不起作用; 它返回一个值0
,但是2
正确的答案.
如果我更改DateTime.Now.AddDays
到7
以下它的作品,因为它应该.
//Ordre klar til bestilling
command.CommandText = "SELECT COUNT(*) from bestillinger WHERE udlevering BETWEEN @date and @dateadd";
command.Parameters.AddWithValue("@date", DateTime.Now.ToString("dd/MM/yyyy"));
command.Parameters.AddWithValue("@dateadd", DateTime.Now.AddDays(+8).ToString("dd/MM/yyyy"));
con.Open();
command.ExecuteNonQuery();
string result0 = command.ExecuteScalar().ToString();
con.Close();
MessageBox.Show(result0);
if (result0 != "0")
{
bestillingToolStripMenuItem.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF1919");
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 12
不要将日期/时间视为字符串.只是:
command.Parameters.AddWithValue("@date", DateTime.Now);
command.Parameters.AddWithValue("@dateadd", DateTime.Now.AddDays(8));
Run Code Online (Sandbox Code Playgroud)
问题可能是日期/时间格式.
请注意,您实际上是无缘无故地执行了两次; 你可以删除command.ExecuteNonQuery()
.
最后,不要将整数视为字符串:
int count = (int)command.ExecuteScalar();
if(count != 0) { .... }
Run Code Online (Sandbox Code Playgroud)
从现在开始的七天,它仍然是九月,日期如下:
30/09/2014
从现在开始的8天,是10月,日期如下:
2014年1月10日
流行测验:是01/10/2014
指10月1日还是1月10日?显然,你的意思是它指的是10月1日,但是世界上的部分地区(可能是Sql Server)会将其读作1月10日.
这里的解决方案是你不应该将日期参数作为字符串传递!.ToString()
完全删除调用可能足以在这种情况下修复它,但我更喜欢明确我的数据库类型:
command.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Today;
command.Parameters.Add("@dateadd", SqlDbType.DateTime).Value = DateTime.Today.AddDays(8);
Run Code Online (Sandbox Code Playgroud)
当然,上面的修复假定您已经在数据库中完成了理智的事情.您可能错误地将日期存储为varchar字段.如果你这样做,SQL Server在比较你的领域为字符串,并根据您的示例格式事情早在一个月中总是会在本月稍后日期之前,甚至在不同的月份进行排序.这意味着,你的榜样结束日期来到之前开始日期.如果这是您的问题,则需要向表中添加新的Date列并编写代码以使用转换的日期值更新行.您可能需要协调此操作,修复应用程序中插入,更新和选择此字段的其他部分.
从中学到的主要教训是:永远不要将日期视为字符串!这适用于除表示层之外的应用程序的每个级别.
归档时间: |
|
查看次数: |
281 次 |
最近记录: |