我正在使用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中。我发现如果我将LIKE
查询从SelectCommand._commandText
复制/粘贴到MS SQL 2005中,它将在MS SQL 2005中返回大约8600行,但在我的C#程序中只返回大约2300行。
类似地,相等查询总是在MS SQL中找到该项,但只有在我的C#代码中才能找到它,如果它是这些2300左右记录的一部分。显然它并不想要返回所有结果,而只返回前几千行,而且无论我是要求10000行(LIKE子句)还是1行(相等),它都表现得像这样。 / p>
我该怎么办?
答案 0 :(得分:0)
尝试这样做以生成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"]);
}