我有一个奇怪的问题,我不知道为什么会这样。我有一些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;
答案 0 :(得分:0)
可能你的代码期望dd.mm.yyyy格式的日期,其中数据库以mm.dd.yyyy格式返回。这就是在12.XX.XXXX之后破解的原因。
在app&amp;中使用相同的格式DB优选为YYYY-MM-DD
答案 1 :(得分:0)
您可以直接使用DbParameters
和DateTime
数据类型。因此,您无需将DateTime
值转换为string
例如:
var command = new SqlCommand("select * from YourTable where SomeDate = @SomeDate"));
command.Parameters.Add(new SqlParameter("@DateEnd", someDateTimeValue));