2016-11-29 5 views
0
string carid = Request.QueryString["carde"]; 
      var conString = ConfigurationManager.ConnectionStrings["CONSTRING"].ConnectionString; 
      SqlConnection con = new SqlConnection(conString); 
      con.Open(); 
      SqlCommand cmd1 = new SqlCommand("SELECT cars.*, img.img FROM cars INNER JOIN img ON cars.carid = img.carid where cars.carid= "+carid+"", con); 
      SqlDataAdapter sda1 = new SqlDataAdapter(cmd1); 
      DataTable dt = new DataTable(); 
      sda1.Fill(dt); 
      cardetail.DataSource = dt; 
      cardetail.DataBind(); 

私はこのクエリで何か問題が見つかりません。 誰も助けることができますか?前もって感謝します。それは曖昧な列名をCarIdと言います

+5

あなたのコマンドで 'SqlParameter'を使用すると、SQLインジェクションの脆弱性が存在します。 –

+0

これを行う方法は知られていません。 – Samsam

+1

勉強に時間がかかる! http://stackoverflow.com/questions/35163361/how-can-i-add-user-supplied-input-to-an-sql-statement –

答えて

0

内部結合には、別の列の列名を持つテーブルがあります。

さらに詳細な評価が必要な場合は、表スキーマを含めてください。

+1

彼はテーブルの名前で列を定義しています。曖昧にならないでください。これは現在のコードでも、selectの中のワイルドカード '*'もそれを上げている(そうは思わない)。 – C4u

0

あいまいなことはわかりませんが、caridのようにパラメータを使用してください。これを試してみると、残りの部分が表示されます。

SqlCommand cmd1 = new SqlCommand(
    "SELECT cars.*, img.img" + 
    "FROM cars, img" + 
    "WHERE cars.carid = img.carid AND cars.carid = @carid", con); 

cmd1.Parameters.AddWithValue("@carid", carid); 
+1

'cars。* selectedCars'は本当ですか?複数の列はどのように単一の名前を持つことができますか?構文エラー? – C4u

+1

私はあいまいさがそれによって引き起こされていると推測しています:)したがって、OPは選択された名前について何かする必要があります。しかし、それはしばらく私はSQLクエリを扱っていない! :)認めた。私は分でそれを修正します。 –

+1

唯一の可能性も考えてください。しかし、複数の選択肢に対して同義語を使用することはできません。彼は各選択肢をそれ自身で定義しなければならなかったでしょう。 – C4u

0

ワイルドカード*が問題になります。

SELECT cars.*, img.img FROM cars INNER JOIN... 

の代わりにワイルドカードでcarsからすべてを選択し、(コーディングのいずれかの方法優れている)手動で選択します。コーディング時にSELECT *を使用するのは悪い習慣です!

SELECT cars.col1, cars.col2, cars.carid, cars.., img.img FROM cars INNER JOIN... 

EDIT:

は、これは私が考えることができる唯一の可能性は確かにあります。しかし、あなたはあなたが使用しているデータベースシステムを提供しています。私はちょうどmssqlでそれを試みたcouldntを再現します。

はテスト用のテーブルを作成するのが面倒だったので、私はいくつかの擬似テーブル

SELECT a.*, b.a FROM (SELECT 1 a, 2 b, 3 ab UNION SELECT 2, 2, 2) a 
LEFT JOIN 
(SELECT 1 a, 2 b, 3ab UNION SELECT 2, 2, 2) b 
ON a.a = b.a 

abが同じ列を持っているa.*でさえ提起エラーなしで行きました。

+0

3回目の問題について考えてみると、私たちが推測することができる唯一のケースは、 'cars'テーブルに同じ名前の複数の列があることです。これも可能ですか? –

+0

いいえ。 「cars。*」は「cars tableのすべて」を意味します。これは、データベースがこれをどのように変換するかによって異なります。 'SELECT col1、col2、carid、img.img'に変換されると、' carid'が両方のテーブルに表示されるのでエラーが発生します。 'cars.carId'と' cars。* 'は非常に異なるものです。 – C4u

+1

@TolgaEvcimen私の編集をチェックしてください。私にとっては再生できません。彼はおそらく、このケースを扱うことができない奇妙なデータベースを使用します。 – C4u

関連する問題