2017-03-09 10 views
0

내 쿼리에서 값을 지정하는 데 문제가 있습니다. 내 GridView에 대한 하나의 행을 받게되지만, 그 값을 읽으려고 할 때, 어떤 변수에 값을 넣으려고하면 어떤 값도 없다고 나에게 말했다.WebForms의 쿼리에서 값 지정

else if (Request.QueryString.AllKeys.Contains("a")) 
{ 
    String sql_user = "SELECT c1.ID, c1.SHORT_NAME, ao1.NAME, c1.REGON FROM (tabel1 c1 LEFT JOIN tabel2 ao1 ON c1.ID = ao1.ID WHERE c1.ID = ?"; 
    connection.OPEN(); 

    OleDbCommand sql_s = new OleDbCommand(sql_user, polaczenie); 

    sql_s.Parameters.add("?", OleDbType.Integer).Value = Request.QueryString["a"]; 

    OleDbDataAdapter sqlDa = new OleDbDataAdapter(sql_s); 

    DataTable dt = new DataTable(); 
    sqlDa.Fill(dt); 

    GRID_VIEW1.DataSource = dt; 

    GRID_VIEW1.DataBind(); 

    OleDbDataReader customer = sql_s.ExecuteReader(); 

    // i want to get SHORT_NAME so that one below i think dosent work 

    // but any way it make me an Exception of any value not found but on GridView it shows me clearly one ROW 
    learerLabel.Text = (String) cmd.ExecuteScalar(); 

    connection.Close(); 
} 

나는 몇 가지 세션 또는 리더와 같은 여러 가지 방법으로 그것을 할하지만 난 지금 내 모든 시도를 remmeber 해달라고하지만 항상 내 쿼리에 값이 없음을 나에게 말했다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 감사합니다

+0

시도를 작동 쓰기 당신이 그것을 사용 싶지 않는 경우 , 당신은 taht를 줄을 변경해야합니다 Parameters.add ("?", OleDbType.Integer)'의'? "를''@p1"'로 대체합니다. – Xiaoy312

답변

0
에서 사용할 수 있습니다

public class MyClass 
{ 
    public int Id { get; set; } 
    public string ShortName { get; set; } 
    public string Name { get; set; } 
    public int Regon { get; set; } 
} 

다음 쿼리에서 데이터가이 시도 얻을 :

하지 더 나은 같은 클래스를 할 것입니다

  CustomClass item = new CustomClass(); 

     String sql_user = "SELECT c1.ID, c1.SHORT_NAME, ao1.NAME, c1.REGON FROM (tabel1 c1 LEFT JOIN tabel2 ao1 ON c1.ID = ao1.ID WHERE c1.ID = @id"; 

     using (var conn = new OleDbConnection("connectionString")) 
     { 
      conn.Open(); 
      using (var cmd = new OleDbCommand(sql_user, conn)) 
      { 
       cmd.Parameters.Add("@id", OleDbType.Integer).Value = Request.QueryString["a"]; 
       cmd.Prepare(); 

       var reader = cmd.ExecuteReader(); 

       if(reader.Read()) 
       { 
        item.Id = (int)reader["ID"]; 
        item.ShortName = reader["SHORT_NAME"].ToString(); 
        item.Name= reader["NAME"].ToString(); 
        item.Regon = (int)reader["REGON"]; 
       } 
       conn.Close(); 
      } 

     } 

편집 :

OleDbDataReader customer = sql_s.ExecuteReader(); 

에 :

  OleDbDataReader customer; 
     var dr = sql_s.ExecuteReader(); 

     if (dr.Read()) 
      customer = dr; 

이 시도하고 PLIS 그것이

0

이 시도 @ID에 매개 변수 이름을 대체, 매개 변수를 전달에 매개 변수를

SELECT c1.ID, c1.SHORT_NAME, ao1.NAME, c1.REGON FROM (tabel1 c1 LEFT JOIN tabel2 ao1 ON c1.ID = ao1.ID WHERE c1.ID = @ID 
sql_s.Parameters.add("@ID", OleDbType.Integer).Value = Request.QueryString["a"]; 

자세한 내용 전달에 MSDN 설명서에 대한 아래 링크를 참조하는 MSDN 아래 https://msdn.microsoft.com/en-us/library/bbw6zyha(v=vs.110).aspx

+0

고마워, 나는 그것을 시도 할 것이다. 하지만이 쿼리 (행)에서 그 값을 실행하는 가장 좋은 방법은 무엇인지 말해 줄 수 있습니까? – Adriano

+0

질문을 올바르게 이해했는지는 확실하지 않지만 데이터 판독기 또는 데이터 어댑터를 사용할 수 있습니다. 귀하의 쿼리가 단 몇 행을 반환하는 경우 데이터 어댑터를 사용하는 것이 좋습니다 그렇지 않으면 데이터 리더를 사용할 수 있습니다. – BipinR