2016-07-19 4 views
0

ado.net에서이 오류는 "여러 부분으로 구성된 식별자"를 해결하는 방법은 SQL 서버에서 잘 작동 2008하지만 ADO.NET에 연결할 때,이 오류 보여줍니다내가 쿼리 다음 한

The multi-part identifier "v.ClientId" could not be bound.
The multi-part identifier "v.ClientId" could not be bound.
The multi-part identifier "v.ClientID" could not be bound.
The multi-part identifier "v.Fare" could not be bound.
The multi-part identifier "v.ClientId" could not be bound.

검색어 :

SELECT 
    f.ID, f.ClientID, vc.Name, 
    f.Fare as FixFares, v.Fare as VehicleFare, 
    f.FromPostCode, f.ToPostCode, f.[From], f.[To], 
    v.ClientId, v.IsActive, v.VehicleID, vc.ID 
FROM 
    VehicleFixeFare AS v 
INNER JOIN 
    FixFare f ON v.ClientId = f.ClientId 
INNER JOIN 
    Vehicle vc ON v.ClientId = vc.ClientId 
WHERE 
    v.ClientID = 159 

코드 나는 다음과 같은 코드를 할 것

conn = new SqlConnection(Connection1); 
conn.Open(); 

// var LIST=(from a in General.GetQueryable<Ve>) 
string Query = "select f.ID, f.ClientID, vc.Name, f.Fare as FixFares, v.Fare as VehicleFare, f.FromPostCode, "+ 
       "f.ToPostCode, f.[From], f.[To], v.ClientId, v.IsActive, v.VehicleID, vc.ID " + 
       "from VehicleFixeFare as v"+ 
       "inner join FixFare f on v.ClientId = f.ClientId inner join Vehicle vc on v.ClientId = vc.ClientId where v.ClientID =" + ClientID; 

SqlDataAdapter ad = new SqlDataAdapter(Query, conn); 
dt = new DataTable(); 

ad.Fill(dt); 
+7

문자열을 보면 'VehicleFixeFare as v'의 별칭과 'inner join'사이에 공백이 없음을 알아야합니다. 또한 잠재적 인 SQL 주입 공격을 막기 위해 쿼리를 변경하는 것이 좋습니다. 클라이언트 ID가 freetype이거나 사용자가 어떤 방식 으로든 조작 할 수 있다면 잠재적으로 위험 할 수 있습니다. 이것을 매개 변수로 변경하십시오. –

+0

저장 프로 시저를 만듭니다. 최소한 ClientID는 매개 변수로 만들어야합니다. –

답변

0

이것은 공간 문제 때문입니다. 각 줄의 시작과 끝 부분에 공간을 남겨두면 문제가 해결됩니다.

string Query = " select f.ID, f.ClientID, vc.Name, f.Fare as FixFares, v.Fare  as VehicleFare, f.FromPostCode, "+ 
      " f.ToPostCode, f.[From], f.[To], v.ClientId, v.IsActive, v.VehicleID, vc.ID " + 
      " from VehicleFixeFare as v "+ 
      " inner join FixFare f on v.ClientId = f.ClientId inner join Vehicle vc on v.ClientId = vc.ClientId where v.ClientID =" + ClientID; 
0

아래, 그것은 가능성이 공간 문제를 제거합니다 오류의 원인이며 더 읽기 쉽습니다.

string Query = 
     @"select f.ID, f.ClientID, vc.Name, f.Fare as FixFares, v.Fare as VehicleFare, f.FromPostCode, 
        f.ToPostCode, f.[From], f.[To], v.ClientId, v.IsActive, v.VehicleID, vc.ID 
      from VehicleFixeFare as v 
      inner join FixFare f on v.ClientId = f.ClientId 
      inner join Vehicle vc on v.ClientId = vc.ClientId where v.ClientID =" + ClientID;