【发布时间】:2016-02-09 07:34:15
【问题描述】:
我有一个列表框,它的项目是从 ASP.net 中的日历控件中选择的日期。现在我需要根据每个日期是否存在数据库表在 foreach 循环中过滤它们。我使用的代码如下:
foreach (string item in ListBoxSelectedDates.Items)
{
string q = "select count(*) from event_calendar where _date='" + Convert.ToDateTime(item).ToString("yyyy-MM-dd") + "'";
MySqlCommand cmd = new MySqlCommand(q, conn);
conn.Open();
if ((long)(cmd.ExecuteScalar() ?? 0) == 0)
{
strBody += i + ". " + Convert.ToDateTime(item).ToString("dd-MMM-yyyy") + ", " + Convert.ToDateTime(item).DayOfWeek + " : Leave <br>";
i++;
}
else
{
strBody += i + ". " + Convert.ToDateTime(item).ToString("dd-MMM-yyyy") + ", " + Convert.ToDateTime(item).DayOfWeek + " : Holiday <br>";
i++;
}
conn.Close();
}
在上面代码的第一行出现错误是:
无法将“System.Web.UI.WebControls.ListItem”类型的对象转换为 输入“System.String”。
在不断尝试后我没有得到正确的解决方案......
【问题讨论】:
-
如果将 foreach(ListBoxSelectedDates.Items 中的字符串项)替换为 foreach(ListBoxSelectedDates.Items 中的 var 项)会不会起作用?
-
不,它不会,因为 ListItem 无法隐式转换为字符串。所以通过 .Value 或 .ToString() 的额外步骤是必要的。这就是 OP 得到错误的原因,如果他按照您的建议更改它,它将把抛出的错误 1 行向下移动到 SQL 字符串。