2017-07-13 13 views
-1

すべてを読んでも、SqlDataAdapaterで動作するようにパラメータを取得できません。誰かが私の問題点を教えてくれれば、それは大いに感謝するだろう。 Parameters.Addを使用しようとしました。なぜなら、これはより良い方法ですが、あきらめて、SqlCommandを無駄に使うことを試みたからです。C#DataAdapterパラメータエラー

private void Run_BTN_Click(object sender, EventArgs e) 
    { 
     var select = "select C.LSTNAME from C " + 
        "inner join bd ON bd.id = C.id " + 
        "@nameParam"; 
     var c = new SqlConnection(CnnString.CnnVal("DB2")); 
     SqlCommand command = new SqlCommand(select, c); 
     var dataAdapter = new SqlDataAdapter(command); 

     command.Parameters.AddWithValue("@nameParam", "where C.LSTNAME = " + Cust_TB.Text); 
     /* dataAdapter.SelectCommand.Parameters.Add(new SqlParameter 
     { 
       ParameterName = "@nameParam", 
       Value = "where C.LSTNAME = " + Cust_TB.Text, 
       SqlDbType = SqlDbType.NVarChar, 
       Size = 2000 // Assuming a 2000 char size of the field annotation (-1 for MAX) 
     }); */ 

     var ds = new DataSet(); 
     try 
     { 
      dataAdapter.Fill(ds); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     Reporting_DGV.ReadOnly = true; 
     Reporting_DGV.DataSource = ds; 
    } 
+0

すべきですか? – SLaks

+1

WHEREをパラメータ値の一部にすることはできません。 – Steve

+0

@Steve Okは感謝を知らなかった –

答えて

2

何ですか?下のコード行を見てください...実際にはWHERE句またはSQL文をパラメータではなく値に注入しています。 SqlParametersは、SQLステートメントに値を渡すためのものです。

command.Parameters.AddWithValue("@nameParam", "where C.LSTNAME = " + Cust_TB.Text); 

あなたのクエリは、問題は何

 var select = "select C.LSTNAME from C inner join bd ON bd.id = C.id where C.LSTNAME = @nameParam"; 
    var c = new SqlConnection(CnnString.CnnVal("DB2")); 
    SqlCommand command = new SqlCommand(select, c); 
    command.Parameters.AddWithValue("@nameParam", Cust_TB.Text); 
    var dataAdapter = new SqlDataAdapter(command); 
+0

ええ、関連する結核にテキストがある場合は、where節のみを実行しようとしていました。私は今、if(this)param =文でパラメータの代わりに完全に異なるクエリを使用しなければならないことに気付きました。そうでない場合param = blank –

関連する問題