SQL文「無効な列名」:クエリの作成方法

    string ID = "";
        if (Session["sID"] != null)
        {
            ID = Session["sID"].ToString();
            con.Open();

            string surveysr = "Select ShowResult from Survey where SurveyID=" + ID ;
            SqlCommand cmd2 = new SqlCommand(surveysr, con);
            SqlDataReader dr = cmd2.ExecuteReader();
           .............

指定されたエラーは「無効な列名 'S29'」です 問題は、IDは単引用符なしでただS29です。 ただし、SQLキャッチが ''である場合。 何か案が??

1

3 答え

絶対に決して文字列連結を使用して、そのようなSQLクエリに値を置き換えないでください。あなたはこれを求めている:

string ID = "";
if (Session["sID"] != null)
{
    ID = Session["sID"].ToString();
    con.Open();

    string surveysr = "Select ShowResult from Survey where SurveyID= @ID";
    SqlCommand cmd2 = new SqlCommand(surveysr, con);
    cmd2.Parameters.Add("@ID", SqlDbType.VarChar, 3).Value = ID;
    SqlDataReader dr = cmd2.ExecuteReader(); 

以前のコードでは、 DROP Table Survey; という名前のIDを作成していましたか?

4
追加された
ちょうど "int"の問題に気づいた - 更新されたコードを試し、そこの "3"を列の実際のサイズに合わせて変更してください。
追加された 著者 Joel Coehoorn,
IDはINTではありません。なぜなら、 "S"で開始するとINTになるからです。アドバイスありがとう
追加された 著者 Marlinus Yapi,

試してください:

string surveysr = "Select ShowResult from Survey where SurveyID='" + ID + "'" ;
0
追加された
これは動作するように見えるかもしれませんが、SQLインジェクションには依然として脆弱です。それを行うのは間違った方法です。
追加された 著者 Joel Coehoorn,
それでもクエリパラメータでそれをしない理由はありません。クエリパラメータは良い習慣を教え、ほとんど常に優れたパフォーマンスを示しますが、文字列の連結は安全でない習慣を奨励します。
追加された 著者 Joel Coehoorn,
あまりにも多くのパラノイア、野生のウェブから来るunsanitized変数であるIDの絶対に言及はありません。あなたの安全でない道徳化の価値はないと確信しています。
追加された 著者 necromancer,
あなたは "?コピー/貼り付けを試してください"の前に余分な一重引用符に気付きましたか?
追加された 著者 necromancer,
ああ、その行で、あなたはそれぞれの側に単一の 'を削除する必要がありますので、それは次のようになります:SurveyID = "+ ID);
追加された 著者 necromancer,
@ agksmehxよ、最初はその作業。しかし、今私はちょうど再びURコードを使用してそれを試みた。それは余分な ''をもう一度示す..
追加された 著者 Marlinus Yapi,
問題は私がResponse.Redirect( "PublicViewResultPage2.aspx?SurveyID = '" + ID + "'")にしたいときに別の行であった。 idは再び ''持っています。私は何をすべきか?
追加された 著者 Marlinus Yapi,

多分この1つはあなたを助けることができます:

string ID = "";
    if (Session["sID"] != null)
    {
        ID = CStr(Session["sID"]).ToString();
        con.Open();

        string surveysr = "Select ShowResult from Survey where SurveyID=" + ID ;
        SqlCommand cmd2 = new SqlCommand(surveysr, con);
        SqlDataReader dr = cmd2.ExecuteReader();
       .............
0
追加された
SQLインジェクションに脆弱で、問題を解決することさえできません。
追加された 著者 Joel Coehoorn,