【发布时间】:2014-08-14 13:53:45
【问题描述】:
我有这个问题:
DataTable ordersbetween = dm.getdatatablebyquery("select * from [reservering]"); // 'WHERE datumstart BETWEEN " + @row["datumstart"] + " AND " + @row["datumeind"] + "");
int totalorders = 0;
foreach (DataRow orders in ordersbetween.Rows)
{
totalorders = totalorders + 1;
}
if (totalorders > 0)
{
%> some orders where found <%
}
即使我在reservering中有8个条目,总订单数总是保持为0。
但是这个几乎相同的查询工作得很好。
DataTable tafellijst = dm.getdatatablebyquery("select * from [tafel]");
foreach (DataRow tafelrow in tafellijst.Rows) { %>
<option value="<%=tafelrow["id"]%>">nummer - <%=tafelrow["id"]%> | plaatsen - <%=tafelrow["plaatsen"]%></option>
<% } %>
您可以看到我目前已简化第一个查询,真正的查询需要选择特定日期时间之间的条目,但是每个 DateTime.tryparse() 都会产生一个日期时间,其最小值不是我的实际日期时间。
我在这里添加了getdatatablebyquery方法:
public DataTable getdatatablebyquery(string query)
{
SqlConnection con = new SqlConnection();
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["connectionstring"].ConnectionString;
con.ConnectionString = connectionString;
try
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter(query, con);
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
return dt;
}
catch (NullReferenceException)
{
DataTable empty = new DataTable();
return empty;
}
catch (SqlException)
{
DataTable empty = new DataTable();
return empty;
}
}
我在这里添加了 web.config:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<connectionStrings>
<add name="connectionstring" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\picobellodatabase.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
这个问题已经回答了。 始终使用 datatable.Rows.Count 并检查数据的回显位置。我在一个 html 元素之间回显了数据,所以它变得不可见!
感谢大家的帮助!
【问题讨论】:
-
你为什么不直接使用
ordersbetween.Rows.Count?我认为迭代没有任何好处......至于DateTime处理 - 您应该使用参数化 SQL。 -
为什么选择所有这些数据项?如果需要计数,只需从数据库中选择计数即可。
-
如何判断sql“不起作用”?放一个断点,检查你的
ordersbetweenDataTable。 -
@CodeCaster 做了这两件事,c# 说每个 DataTable = null 而数据在屏幕上返回:/
-
你试过
DataTable ordersbetween = dm.getdatatablebyquery("select COUNT(*) from [reservering]");吗?那应该只包含一行,并且可以让您查看问题是在数据库端还是在客户端。如果您仍然有 0 行,那么问题可能出在getdatatablebyquery。