2016-06-10 70 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"); 
    } 
}