【问题标题】:sql does not work for specific query c#sql不适用于特定查询c#
【发布时间】: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“不起作用”?放一个断点,检查你的ordersbetween DataTable。
  • @CodeCaster 做了这两件事,c# 说每个 DataTable = null 而数据在屏幕上返回:/
  • 你试过DataTable ordersbetween = dm.getdatatablebyquery("select COUNT(*) from [reservering]");吗?那应该只包含一行,并且可以让您查看问题是在数据库端还是在客户端。如果您仍然有 0 行,那么问题可能出在 getdatatablebyquery

标签: c# mysql datetime


【解决方案1】:

您可以将代码更改为

if (ordersbetween.Rows.Any())
{
     %> some orders where found <%
}

虽然foreach 应该枚举行,但令人惊讶的是你得到了 0。
你对getdatatablebyquery() 正在做它应该做的事情有多大信心?

【讨论】:

  • 我在信息中添加了 getdatatablebyquery 方法,但我相信它已经好几个星期了。
  • 这帮助我找到了答案,我终于找到了,我很高兴!将数据表更改为选择 .Count 后,它开始工作。只有第一次我没有看到它。这是因为我在 html
【解决方案2】:

我确定这是因为异常。 在两个 catch 左大括号上放置一个断点并告诉我们异常消息。

【讨论】:

  • 添加断点运行代码,没有结果但断点没有触发。 :(
  • @Corne 我还以为你说连接字符串是null 导致异常?
  • @Jonny 仅当我将断点添加到方法时,它以某种方式返回 null 并且我没有得到任何数据。如果我删除该断点,它会运行,但特定查询除外。太奇怪了,这不应该是可能的吧!但是我可以在其他地方添加断点,因为这个添加断点到 catch 的例子仍然返回数据。
  • 当您不调试时,连接字符串似乎是null。结果你得到一个 NullReferenceException 抛出,然后它被第一个 catch 块捕获,然后你得到一个空表返回 - 这正是你所看到的。您需要为您的数据源获取正确的连接字符串。
  • 如果DataTableDataAdapter.Fill 之后没有行,那肯定意味着数据库表是空的。你检查过表格里面的数据吗?
猜你喜欢
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
相关资源
最近更新 更多