0

我尝试从数据表中绑定标签

我收到这个错误

  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

4 回答 4

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 注入攻击。为了您自己和您的用户,您确实应该使用参数化查询,而不是像这样连接您的 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.

于 2013-12-06T04:10:31.587 回答
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());
于 2013-12-06T04:10:28.253 回答
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();
于 2013-12-06T04:11:14.237 回答
0

我在 da.Fill() 的代码中没有看到任何问题。但我在以下声明中看到了另一个问题:

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

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

...Password=" + pass);

或者

...Password=pass");

我想知道您没有收到 pass* 的未定义变量错误。

于 2013-12-06T04:38:25.020 回答