我尝试从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();
p.s.w.g.. 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
.
你不能在多行中打破正常的字符串文字,你的结束引号也是错误的:
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
.