无法转换某些SQL时间格式

时间:2015-02-20 07:53:32

标签: c# sql winforms time

我有一个奇怪的问题,我不知道为什么会这样。我有一些Listboxes和一个DataGridView。可以在列表框中选择多个元素(多个列表框或多个列表框中) - 每个列表框表示我的数据库中的一列,表示DataGridView中的用户选择。现在,当我选择dateformat(列:交付日期)时,我会执行SELECT语句。即使我在此框中选择多个日期(OR语句),这也有效。在列表框中选择日期而在另一个框中选择另一个元素时,它是带有AND的SELECT语句 - 例如:

SELECT [...] FROM [...] WHERE (Customer_Id='0061') AND(Delivery_Date='01.10.2013') 

AND语句直到12.XX.XXXX为止。然后它崩溃超出范围异常并告诉我varchar无法格式化为datetime。但是当我选择了多个日期和其他列表框中的其他元素(OR和AND语句)时,它可以工作......这是什么?

我从列表框中读取值并将它们放入数组中。然后我格式化它们并将格式化的值复制到另一个数组中:

for (int i = 0; i < timeElementsUnformated.Count; i++)
        {
            formatTime = timeElementsUnformated[i];
            formatTime2 = formatTime.ToString("dd/MM/yyyy");
            timeElements.Add(formatTime2);
        }

现在我只是从数组中读取元素以构建SQL语句并编写:

 "(convert(varchar(10),Delivery_Date,104)='"

出了什么问题?我希望我能说出这个问题可以理解

编辑: 这是AND连接

  if (filteredValues.Count > 1)
        {
            for (int j = 1; j < filteredValues.Count; j++)
            {
                partialANDstatement = " AND" + "(" + filteredValues[j] + ")";
                finalANDstatement = finalANDstatement + partialANDstatement;

            }

            finalANDstatement2 = "(" + filteredValues[0] + ")" + finalANDstatement;

2 个答案:

答案 0 :(得分:0)

可能你的代码期望dd.mm.yyyy格式的日期,其中数据库以mm.dd.yyyy格式返回。这就是在12.XX.XXXX之后破解的原因。

在app&amp;中使用相同的格式DB优选为YYYY-MM-DD

答案 1 :(得分:0)

您可以直接使用DbParametersDateTime数据类型。因此,您无需将DateTime值转换为string 例如:

var command = new SqlCommand("select * from YourTable where SomeDate = @SomeDate"));
command.Parameters.Add(new SqlParameter("@DateEnd", someDateTimeValue));