System.Data.SqlClient를 사용하여 C# 응용 프로그램을 실행하고 있습니다. 내 코드가 필요한 모든 행을 검색하지 않습니다. 가장 간단한 형태는 다음과 같습니다 Read()
에 false를 반환 평등 쿼리를 디버깅하기 위해ExecuteReader 및 Read()에서 모든 결과를 가져 오지 못했습니다.
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>
...
}
...
}
, 내가 LIKE query
를 사용하여 목록에 결과를 밀어 시도했다. 내가 찾은 바는 SelectCommand._commandText
의 LIKE
쿼리를 MS SQL 2005로 복사/붙여 넣으면 MS SQL 2005에서 약 8600 개의 행을 반환하지만 C# 프로그램에서는 약 2300 개만 반환한다는 것입니다.
마찬가지로 평등 쿼리는 MS SQL에서 항목을 찾지 만 2300 개 정도의 레코드의 일부인 경우에만 내 C# 코드에서 찾습니다. 외관상으로는 모든 결과를 반환하지 않고 첫 번째 수천 행만 반환하려는 것입니다.이 동작은 내가 10000 개의 행 (LIKE 절) 또는 1 개의 행 (같음)을 요구하는지 여부를 나타냅니다.
어떻게해야합니까?
및 것입니다 그것은'SalesOrder' 테이블에있는 타입인가요? – juharr
SQL 주입 공격을 피하려면 쿼리를 매개 변수화하십시오. – FJT
SSMS를 사용할 때 연결 문자열이 동일한 데이터베이스를 사용하고 있는지 100 % 확신합니까? – FJT