2016-06-10 5 views
0

Error imageSQLEXCEPTION은 SQLEXCEPTION 3. 아래</p> <p>근처에 사용자 코드, 잘못된 구문에 의해 처리되지 않은이었다된다 <p></p> 내가이 오류를 가지고, 사용자 코드, 근처의 구문이 잘못되었습니다 '3'

안녕들에 의해 처리되지 않은했다 내 코드 야.

private void get3GSiteID() 
    { 
     string name3G = ""; 

     DataTable dtSite = new DataTable();    

     sqlStr = " SELECT "; 
     sqlStr += " SNumb "; 
     sqlStr += " FROM "; 
     sqlStr += " 3G.DBO.W_Site AS W_SITE"; 
     sqlStr += " WHERE "; 
     sqlStr += " W_SITE.Address = '" + siteAddress + "'";    
     SqlDataAdapter daSite = new SqlDataAdapter(sqlStr, tGConnection3G); 
     dtSite.Clear(); 
     daSite.Fill(dtSite); 
     if (dtSite.Rows.Count > 0) 
     { 
      name3G = dtSite.Rows[0]["SNumb"].ToString(); 
      siteIDCheckBox.Add(name3G); 
      bssNetworkList.Add("3G"); 
     } 
    } 

도와주세요. 난 .. 이미 2 일 동안 여기

감사

+0

을 .DBO.W_Site 문제가 발생하면 예외가 발생할 때 사용되는 값을 지정하여 도움을 받아야합니다 ('SNumb','siteAddress'). 그건 적어도 우리가 예외를 일으키는 SQL 명령이 무엇인지 볼 수 있습니다 ... – Dave

+0

ok SNumb은 site003 이고 siteAddress는 blk입니다 123 좋은 도로 –

+0

그래서 예외를 일으키는 SQL 문은'SELECT site003 from 3G.DBO.W_Site AS W_SITE WHERE W_SITE.Address = 'blk 123 good road''? 어떤 RDBMS를 사용하고 있습니까? – Dave

답변

0

이 시도 붙어 봤는데; SQL 서버의 첫 번째 문자는 다음 중 하나 여야합니다 rules for database identifiers state

하는 : 유니 코드 표준 3.2에 의해 정의 된 같은 편지. 의 유니 코드 정의에는 a부터 z까지의 라틴 문자, A부터 Z까지의 문자와 다른 언어의 문자 인 이 포함됩니다.

밑줄 (_), 기호 (@) 또는 숫자 기호 (#).

식별자의 시작 부분에있는 특정 기호는 SQL Server에서 특별한 의미를 갖습니다. at 기호로 시작하는 일반 식별자 은 항상 로컬 변수 또는 매개 변수를 나타내며 다른 유형의 개체 이름으로 사용할 수 없습니다. 숫자 기호로 시작하는 식별자는 임시 테이블 또는 프로 시저를 나타냅니다. 이중 숫자 기호 (##) 으로 시작하는 식별자는 전역 임시 개체를 나타냅니다. 숫자 기호 또는 숫자 기호 문자 을 사용하여 다른 유형의 이름 인 의 개체를 시작할 수는 있지만이 방법은 권장하지 않습니다. 일부 Transact-SQL 함수의 이름은 이중 at 기호 (@@)로 시작합니다. 이 이러한 기능과 혼동되지 않도록하려면 으로 시작하는 이름을 @@과 함께 사용하면 안됩니다.

데이터베이스를 쿼리하려고 했으므로 아마도 이미 존재하기 때문에 얻을 수있는 것은 큰 따옴표 또는 대괄호로 이름을 구분해야한다는 것입니다. @ 데이브에

private void get3GSiteID() 
    { 
     string name3G = ""; 

     DataTable dtSite = new DataTable();    

     sqlStr = " SELECT "; 
     sqlStr += " SNumb "; 
     sqlStr += " FROM "; 
     sqlStr += " [3G.DBO.W_Site] AS W_SITE"; 
     sqlStr += " WHERE "; 
     sqlStr += " W_SITE.Address = '" + siteAddress + "'";    
     SqlDataAdapter daSite = new SqlDataAdapter(sqlStr, tGConnection3G); 
     dtSite.Clear(); 
     daSite.Fill(dtSite); 
     if (dtSite.Rows.Count > 0) 
     { 
      name3G = dtSite.Rows[0]["SNumb"].ToString(); 
      siteIDCheckBox.Add(name3G); 
      bssNetworkList.Add("3G"); 
     } 
    } 
+0

Ohhhhhh. ur 답변을 주셔서 대단히 감사합니다. 그러나 나는 그것을 시도했다고 생각합니다. 하지만 잘못된 개체 [3G.DBO.W_Site]라는 또 다른 예외가있었습니다. 내가 어디에서라도 실수를 저지른 것인지 잘 모르겠다. 재미있는 것은 u가 언급 한 이유와 같은 번호로 시작하지 않는 다른 모든 데이터베이스에 대해 동일한 코드가 작동한다는 것입니다. –

+0

다른 모든 데이터베이스에서 동일한 방법이 적용됩니다. * –

+0

시스템에 대한 액세스 권한이 없습니다. 나는 아프다고 생각한다. 다시 월요일에 대답해라. –

1

덕분에, 내가 대답을 해결하기 위해 관리했습니다,이 아니 [3G.DBO.W_Site]이 아니라 [3G]를 파악하기 위해

private void get3GSiteID() 
{ 
    string name3G = ""; 

    DataTable dtSite = new DataTable();    

    sqlStr = " SELECT "; 
    sqlStr += " SNumb "; 
    sqlStr += " FROM "; 
    sqlStr += " **[3G]**.DBO.W_Site AS W_SITE"; 
    sqlStr += " WHERE "; 
    sqlStr += " W_SITE.Address = '" + siteAddress + "'";    
    SqlDataAdapter daSite = new SqlDataAdapter(sqlStr, tGConnection3G); 
    dtSite.Clear(); 
    daSite.Fill(dtSite); 
    if (dtSite.Rows.Count > 0) 
    { 
     name3G = dtSite.Rows[0]["SNumb"].ToString(); 
     siteIDCheckBox.Add(name3G); 
     bssNetworkList.Add("3G"); 
    } 
}