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エラーです。有効な ID を渡していません。

それは2つのことのうちの1つです。

オプション 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 に答える