2017-03-31 31 views
1

ウィンドウフォームを開いたユーザーに基づいて写真を選択したいとします。Where句の動的値

where句に「where id = 36」という数字を入れると、ID 34(その静的)の写真のみが表示されます。どのように私はそれを動的にすることができますか?すべてのユーザーは自分の写真を持っているので、読み込む必要があります。以下のコード。

cmd = new SqlCommand("select profilepic from users where [email protected]", con); 
     cmd.Parameters.Add("@ID", SqlDbType.Int); 
     cmd.Parameters["@ID"].Value = profilePic; 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 
     if (ds.Tables[0].Rows.Count > 0) 
     { 
      MemoryStream ms = new MemoryStream((byte[])ds.Tables[0].Rows[0]["profilepic"]); 
      pictureBox1.Image = new Bitmap(ms); 
     } 
+1

sql paramtersをチェックしてください。 – juharr

答えて

1

動的にSQL文を作成する代わりに、Parameterオブジェクトを使用して追加する必要があります。それは通常より安全であり、パフォーマンスに関して実際にはペナルティを課すことはありません。

var con = new SqlConnection(); 
var cmd = new SqlCommand("select profilepic from users where [email protected]", con); 
cmd.Parameters.AddWithValue("@id", 36); 
var pic = cmd.ExecuteScalar(); 
+0

エラー:System.InvalidCastException: 'パラメータ値をprofilePicからInt32に変換できませんでした。' –

+0

まあ、どのタイプがprofilePicですか? –

+0

@ArdiHasani残念ながら、私はコードを試すのに便利なSQL Serverを持っていませんが、あなたのエラーは、いくつかの奇妙な理由で 'profilePic'が' @id'ではなくパラメータであることを示唆しています。私はあなたのクエリ(間違ったデータ型、クエリのテーブル/フィールドとして使用されるキーワードなど)に何か間違っているという気持ちがあります。 – Vikhram