为什么我在'='错误附近得到错误的语法

时间:2013-12-06 04:09:01

标签: c# sqldatadapter

我尝试从datatable

绑定标签

我收到此错误

  Incorrect syntax near '='.

在这一行

 da.Fill(dt);

我的代码:Page_Load

LbLID.Text =this.Page.Request.QueryString["DI"].ToString();

 SqlConnection con = new SqlConnection("Data Source=local;Initial Catalog=DB;User 
 ID=sa;Password="pass);
 SqlDataAdapter da = new SqlDataAdapter("select * from Table1 where ID= " + 
 LbLID.Text.Trim(), con);

 System.Data.DataTable dt = new System.Data.DataTable();
 da.Fill(dt);
 lblS1.Text = dt.Rows[0][4].ToString();
 lblS1.DataBind();

4 个答案:

答案 0 :(得分:5)

你不能在多行中打破正常的字符串文字,你的结束语也是错误的:

SqlConnection con = new SqlConnection("Data Source=local;Initial Catalog=DB;User ID=sa;Password=pass");

或者使用一个逐字的文字,你可以跨越多行:

SqlConnection con = new SqlConnection(
    @"Data Source=local;
      Initial Catalog=DB;
      User ID=sa;
      Password=pass");

也就是说,您的代码容易受到SQL injection攻击。为了您自己,为了您的用户,您真的应该使用参数化查询,而不是像这样连接您的SQL查询。

这是一个简单的例子:

using(var con = new SqlConnection(...))
{
    var cmd = new SqlCommand("select * from Table1 where ID = @ID", con);
    con.Open();
    cmd.Parameters.AddWithValue("@ID", LbLID.Text.Trim());
    var da = new SqlDataAdapter(cmd);
    var dt = new DataTable();
    da.Fill(dt);
    lblS1.Text = dt.Rows[0][4].ToString();
    lblS1.DataBind();
}

其他一些提示:您应该避免使用select *查询,因为您的数据库架构可能会更改,这会破坏任何现有代码。最好只选择您感兴趣的列,并简单地调用ExecuteScalar

答案 1 :(得分:3)

试试这个:

SqlDataAdapter da = new SqlDataAdapter("select * from Table1 where ID ='" + 
                        LbLID.Text.Trim() + "'", con);

但请注意,这是一个非常糟糕的代码,容易受到sql注入。

所以你应该试试这个:

var com = new SqlCommand("SELECT * FROM Table1 WHERE ID=@id", con);
com.Parameters.AddWithValue("id",LBLID.Text.Trim());
var da = new SqlDataAdapter(com);

或更短:

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Table1 WHERE ID=@id", con);
da.SelectCommand.AddWithValue("id",LBLID.Text.Trim());

答案 2 :(得分:2)

它是一个SQL错误。您没有传递有效的身份证。

这是两件事之一。

选项A:您的ID是一个字符串。在这种情况下..你需要使用单引号:

SqlDataAdapter da = new SqlDataAdapter("select * from Table1 where ID= '" + LbLID.Text.Trim() + "'", con);

选项B:您的LbLId错误了...您正在检查["DI"] ..当我认为它应该是["ID"]时:

LbLID.Text =this.Page.Request.QueryString["ID"].ToString();

答案 3 :(得分:0)

我在da.Fill()的代码中没有看到任何问题。但我在下面的陈述中看到另一个问题:

SqlConnection con = new SqlConnection("Data Source=local;Initial Catalog=DB;User 
 ID=sa;Password="pass);

...Password="pass); - 应该是

...Password=" + pass);

OR

...Password=pass");

我想知道你没有为pass *获得一个未定义的变量错误。