2017-09-12 5 views
0

プログラミングに慣れていてC#(Visual Studio 2017 CE)で始まりました
私はアプリケーションを作成しています。 DataGrid私はDB(MDFファイル)ベースのC#のサービスへのクエリを使用してDataGridを埋めるためにしようとしています
私はアプリを実行し、クエリステートメントをしようとすると、私はこのエラーを取得:。。SqlDataReader日付を使用してSQLクエリでデータグリッドを塗りつぶします "オペランドタイプのクラッシュ:日付がintと互換性がありません"

Operand type clash: date is incompatible with int

行。
SQL SelectステートメントをSQL Seでテストしました。それはそこで働いています。

using (SqlConnection conn = Conexion.Conectado()) 
{ 
    string strsql = "SELECT dbo.Personas.Nombres, dbo.Personas.Apellidos, dbo.Prestamo.prestamo_id, dbo.Prestamo.fecha, dbo.Prestamo.Monto_prestamo, dbo.Prestamo.Ruta, dbo.Prestamo.Quotas, dbo.Prestamo.Balance, dbo.Registro_pagos.Monto_pago, dbo.Registro_pagos.Mora FROM dbo.Personas INNER JOIN dbo.Prestamo ON dbo.Personas.Persona_id = dbo.Prestamo.fk_Persona_id INNER JOIN dbo.Registro_pagos ON dbo.Prestamo.prestamo_id = dbo.Registro_pagos.fk_prestamo_id where dbo.Registro_pagos.fecha_pago = " + Dtp_fecha_cuadre.Text; 


    SqlCommand cmd = new SqlCommand(strsql, conn); 
    cmd.CommandType = CommandType.Text; 
    SqlDataReader dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
     string Nombres = dr["Nombres"].ToString(); 
     string Apellidos = dr["Apellidos"].ToString(); 
     string num_prestamo = dr["prestamo_id"].ToString(); 
     DateTime fecha = Convert.ToDateTime(dr["fecha"].ToString()); 
     double Monto_prestamo = Convert.ToDouble(dr["Monto_prestamo"].ToString()); 
     string Codigo_ruta = dr["Ruta"].ToString(); 
     string Quotas = dr["Quotas"].ToString(); 
     double Balance = Convert.ToDouble(dr["Balance"].ToString()); 
     double Monto_pago = Convert.ToDouble(dr["Monto_pago"].ToString()); 
     double Mora = Convert.ToDouble(dr["Mora"].ToString()); 

     Dgv_cuadre_rutas.Rows.Add(Nombres, Apellidos, num_prestamo, fecha,Monto_prestamo , Codigo_ruta, Quotas, Balance, Monto_pago, Mora); 
    } 
    conn.Close(); 
} 
+0

@mjwillsを編集しますしかし、ピアレビューのために保留中です – Niladri

+0

私の質問の書式設定の助けをありがとう! – engel

+0

@engelはこの行で例外を受け取りますか?DateTime fecha = Convert.ToDateTime(dr ["fecha"]。ToString()); 'what is tあなたのテーブルの 'fecha'カラムのデータ型ですか? – Niladri

答えて

0

ご理解のために、事前に感謝し、私は、エラーに関連する複数の質問を読みましたが、私はプログラミングに新人だので、ほとんどすべての答えを理解することが困難な方がはるかに簡単である代わりに、SQLデータアダプターを使用して取得しますエラーを取り除く

  using (SqlConnection conn = Conexion.Conectado()) 
      { 
       string strsql = "SELECT dbo.Personas.Nombres, dbo.Personas.Apellidos, dbo.Prestamo.prestamo_id, dbo.Prestamo.fecha, dbo.Prestamo.Monto_prestamo, dbo.Prestamo.Ruta, dbo.Prestamo.Quotas, dbo.Prestamo.Balance, dbo.Registro_pagos.Monto_pago, dbo.Registro_pagos.Mora FROM dbo.Personas INNER JOIN dbo.Prestamo ON dbo.Personas.Persona_id = dbo.Prestamo.fk_Persona_id INNER JOIN dbo.Registro_pagos ON dbo.Prestamo.prestamo_id = dbo.Registro_pagos.fk_prestamo_id where dbo.Registro_pagos.fecha_pago = " + Dtp_fecha_cuadre.Text; 


       SqlCommand cmd = new SqlCommand(strsql, conn); 
       cmd.CommandType = CommandType.Text; 
       SqlDataAdapter adapter = new SqlDataAdapter(strsql, conn); 

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

       Dgv_cuadre_rutas.DataSource = dt; 

       conn.Close(); 
      } 
+0

返信する時間をとってくれてありがとう、DataAdapter d idは問題を解決していませんが、adapter.fill(dt)行でも同じエラーが表示されます – engel

+0

DGVのデータベースに問題があります。あなたのコードにDGVのプロパティを設定していますか?私はフォームからDGVを削除し、再追加して、問題がなくなるかどうかを確認します。 DGVの列の1つを整数として設定し、DataBaseに列の日付が設定されていると思われます。 – jdweng

+0

我々は同じ考えを持っていた、私は私のデータグリッドを削除し、追加の形成なしで新しいものを置いたが、同じエラーがあった:この行の最後にselect文を変更した "+" Dtp_fecha_cuadre.Text + % '";エラーが表示されなくなりましたが、データグリッドは空のセルを持つDB列のみを表示しています。この変更を行う前に、列が追加されたDataGridをコードに追加しました。 – engel

0

エラーを修正できました。私の元のクエリで "=" + Dtp_fecha_cuadre.Text; "を使用していたので、エラーが最初に発生します。" - like "に変更する必要があったので、等号はデータをint形式で送信します" + Dtp_fecha_cuadre.Value.ToString ()+ "'" ;; - しかし、この時点ではデータグリッドがいっぱいになっていなかったので、送信している日付文字列が正しい形式でなく、クエリを「好き」に調整したというアイデアを思いつきました。 "+ Dtp_fecha_cuadre.Value.ToString(" YYYY-MM-DD ")+" ' ";と、これは私の問題を解決するため、ここで私を助けているおかげで、すべての - エンゲルは、1分前、私はそれをフォーマットし

using (SqlConnection conn = Conexion.Conectado()) 
     { 

      string strsql = "SELECT dbo.Personas.Nombres, dbo.Personas.Apellidos, dbo.Prestamo.prestamo_id, dbo.Prestamo.fecha, dbo.Prestamo.Monto_prestamo, dbo.Prestamo.Ruta, dbo.Prestamo.Quotas, dbo.Prestamo.Balance, dbo.Registro_pagos.Monto_pago, dbo.Registro_pagos.Mora FROM dbo.Personas INNER JOIN dbo.Prestamo ON dbo.Personas.Persona_id = dbo.Prestamo.fk_Persona_id INNER JOIN dbo.Registro_pagos ON dbo.Prestamo.prestamo_id = dbo.Registro_pagos.fk_prestamo_id where dbo.Registro_pagos.fecha_pago like '" + Dtp_fecha_cuadre.Value.ToString("yyyy-MM-dd") +"'"; 


      SqlCommand cmd = new SqlCommand(strsql, conn); 
      cmd.CommandType = CommandType.Text; 
      SqlDataReader dr = cmd.ExecuteReader(); 

      while (dr.Read()) 
      { 

       string Nombres = dr["Nombres"].ToString(); 
       string Apellidos = dr["Apellidos"].ToString(); 
       string num_prestamo = dr["prestamo_id"].ToString(); 
       DateTime fecha = Convert.ToDateTime(dr["fecha"].ToString()); 
       double Monto_prestamo = Convert.ToDouble(dr["Monto_prestamo"].ToString()); 
       string Codigo_ruta = dr["Ruta"].ToString(); 
       string Quotas = dr["Quotas"].ToString(); 
       double Balance = Convert.ToDouble(dr["Balance"].ToString()); 
       double Monto_pago = Convert.ToDouble(dr["Monto_pago"].ToString()); 
       double Mora = Convert.ToDouble(dr["Mora"].ToString()); 


       Dgv_cuadre_rutas.Rows.Add(Nombres, Apellidos, num_prestamo, fecha, Monto_prestamo, Codigo_ruta, Quotas, Balance, Monto_pago, Mora); 

      } 
      conn.Close(); 
関連する問題