2014-10-22 10 views
0

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._commandTextLIKE 쿼리를 MS SQL 2005로 복사/붙여 넣으면 MS SQL 2005에서 약 8600 개의 행을 반환하지만 C# 프로그램에서는 약 2300 개만 반환한다는 것입니다.

마찬가지로 평등 쿼리는 MS SQL에서 항목을 찾지 만 2300 개 정도의 레코드의 일부인 경우에만 내 C# 코드에서 찾습니다. 외관상으로는 모든 결과를 반환하지 않고 첫 번째 수천 행만 반환하려는 것입니다.이 동작은 내가 10000 개의 행 (LIKE 절) 또는 1 개의 행 (같음)을 요구하는지 여부를 나타냅니다.

어떻게해야합니까?

+0

및 것입니다 그것은'SalesOrder' 테이블에있는 타입인가요? – juharr

+1

SQL 주입 공격을 피하려면 쿼리를 매개 변수화하십시오. – FJT

+0

SSMS를 사용할 때 연결 문자열이 동일한 데이터베이스를 사용하고 있는지 100 % 확신합니까? – FJT

답변

0

이 행해져 Yout SQL 문을 만들기 위해이 일을보십시오 :

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

그리고이 목록에 행을 저장합니다 : 코드에서 SalesOrderID` '의 정확한 값을 무엇

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