2016-06-10 36 views
0

Error imageSQLEXCEPTION是由用戶代碼,不正確的語法附近「3」

傢伙嗨未處理,

我有這樣的錯誤,從而SQLEXCEPTION是由用戶代碼,不正確的語法未處理近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

爲了弄清楚這個問題,你需要通過指定異常發生時使用的值('SNumb','siteAddress')來提供幫助。這將至少讓我們看到什麼導致異常的SQL命令是... – Dave

+0

好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 Server rules for database identifiers state

第一個字符必須是下列之一:一個字母定義 Unicode標準3.2。字母 的Unicode定義包括從a到z,從A到Z的拉丁字符,以及其他語言的字母字符也包括 。

下劃線(_),符號爲 (@)或數字符號(#)。

標識符開頭的某些符號在SQL Server中有特殊含義。以at開頭的常規標識符 始終表示局部變量或 參數,並且不能用作任何其他類型對象的名稱。 以數字符號開頭的標識符表示臨時表 或過程。以雙號數字符號(##) 開頭的標識符表示全局臨時對象。儘管數字符號或雙數字符號字符可用於開始其他類型的名稱 對象,但我們不建議這種做法。一些Transact-SQL函數的名稱以符號(@@)處的double開頭。爲避免 與這些功能混淆,您不應使用以@@開頭 的名稱。

由於您試圖查詢數據庫,可能它已經存在,這意味着它需要使用雙引號或方括號來分隔名稱。

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。非常感謝你的回答。但我想我已經嘗試過了。但它有另一個例外說無效對象[3G.DBO.W_Site]。不知道我是否在任何地方犯了什麼錯誤。有趣的是,相同的代碼適用於所有其他數據庫,它不以數字開頭,就像你說的那樣。 –

+0

同樣的方法適用於所有其他數據庫* –

+0

我現在無法訪問系統。我猜你週一再次回答你的問題。 –

1

感謝@戴夫,我已經成功地解決了答案,它不是[3G.DBO.W_Site]而是[3G] .DBO.W_Site

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"); 
    } 
}