我正在使用 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>
...
}
...
}
为了调试返回 false on 的相等查询,Read()
我尝试使用LIKE query
并将结果推送到列表中。我发现如果我将LIKE
查询从MS SQL 2005 复制/粘贴SelectCommand._commandText
到 MS SQL 2005 中,它将在 MS SQL 2005 中返回大约 8600 行,但在我的 C# 程序中仅返回大约 2300 行。
同样,相等查询总是在 MS SQL 中找到该项目,但只有在我的 C# 代码中才找到它,如果它是这 2300 条左右记录的一部分。显然它不想返回所有结果,而只返回前几千行,无论我要求 10000 行(LIKE 子句)还是 1 行(相等),它的行为都是这样的。
我应该怎么办?