未从ExecuteReader和Read()获取所有结果



我正在使用System.Data.SqlClient运行一个C#应用程序。我的代码没有检索到它应该检索的所有行。最简单的形式是:

class SalesDatabase()
{
protected SqlConnection m_database; // opened on class creation
...
     public bool GetPurchaseOrder(String SalesOrderID, out PurchaseOrder po)
     {
     ...
     String QueryString = "SELECT SalesOrderID from sysdba.SalesOrder WHERE " +
                          "(SalesOrderID='" + SalesOrderID + "')";
      // OR
     String QueryString = "SELECT SalesOrderID from sysdba.SalesOrder WHERE " +
              "(SalesOrderID LIKE '" + SalesOrderID.Substring(0,8) + "%')'";

     SqlCommand SelectCommand = new SqlCommand(QueryString, m_database);
     SqlDataReader results = SelectCommand.ExecuteReader();
     bool bRetVal = results.Read();
     // OR
     while (results.Read()) push results[0] into a List<String>
     ...
     }
...
}

为了调试在Read()上返回false的相等查询,我尝试使用LIKE query并将结果推送到List中。我发现,如果我将SelectCommand._commandText中的LIKE查询复制/粘贴到MS SQL 2005中,它在MS SQL 2005中将返回大约8600行,但在我的C#程序中仅返回大约2300行。

类似地,相等查询总是在MSSQL中找到该项,但只有当它是这2300条左右记录的一部分时,它才会在我的C#代码中找到。显然,它不想返回所有结果,只想返回前几千行,无论我请求10000行(like子句)还是1行(相等),它都是这样的。

我该怎么办?

尝试这样做以使您的SQL语句:

String QueryString = "SELECT SalesOrderID from sysdba.SalesOrder WHERE SalesOrderID = @SalesOrderID";
SelectCommand.Parameters.Add("@SalesOrderID", SalesOrderID);

这是为了将行保存到列表中:

List<string> list = new List<string>();
    while(results.Read()){
    list.Add(results["SalesOrderID"]);
    }

相关内容

  • 没有找到相关文章

最新更新