2017-09-12 3 views
0

Ich bin neu in der Programmierung und ich begann mit C# (Visual Studio 2017 CE);
Ich schreibe eine Anwendung und mit einem . DataGrid ich versuche, die DataGrid mit einer Abfrage in einer C#-Dienst auf Basis DB (mDF-Datei) zu füllen
Wenn ich die app laufen und versuchen, die Abfrage-Anweisung erhalte ich diese Fehlermeldung:.Fill Datagrid mit Sql Abfrage mit Datum "'Operand Typ Konflikt: Datum ist nicht kompatibel mit Int' '

Operand type clash: date is incompatible with int

am SqlDataReader Linie
Ich habe die SQL Select Anweisung in der SQL Se getestet rver und es funktioniert dort. Ich habe mehrere Fragen zu dem Fehler im Zusammenhang gelesen, aber da ich einen Anfänger in der Programmierung bin fast alle Antworten sind schwer zu verstehen, Vielen Dank im Voraus für Ihr Verständnis

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 i formatierte aber seine ausstehende für Peer-Review – Niladri

+0

Danke für die Hilfe mit meiner Frage Formatierung! – engel

+0

@engel erhalten Sie Ausnahme bei dieser Zeile? 'DateTime fecha = Convert.ToDateTime (dr [" fecha "]. ToString());' was ist t Der Datentyp für 'fecha' Spalte in Ihrer Tabelle? – Niladri

Antwort

0

Verwendet SQL Dataadapter statt, die viel einfacher ist, und wird erhalten los Fehler

  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

Vielen Dank für die Zeit zu nehmen, den DataAdapter d ID das Problem nicht lösen, bekomme ich immer noch den gleichen Fehler an der adapter.fill (dt) Zeile – engel

+0

Es ist etwas falsch mit der Datenbank Ihres DGV. Legen Sie die Eigenschaften des DGV in Ihrem Code fest? Ich würde den DGV aus Formular löschen und neu hinzufügen und sehen, ob das Problem weggeht. Ich vermute, dass Sie eine der Spalten im DGV als Integer setzen und die DataBase ein Datum in der Spalte hat. – jdweng

+0

hatten wir den gleichen Gedanken, ich habe mein Datagrid entfernt und ein neues ohne zusätzliche Bildung, aber hatte den gleichen Fehler: dann änderte die Select-Anweisung am Ende der Zeile für diese "wie '" + Dtp_fecha_cuadre.Text + " % '"; und der Fehler verschwand, aber das Datagrid zeigt nur die DB-Spalten Kopfzeilen mit leeren Zellen an, bevor ich dies änderte ich hace ein Datagrid mit Spalten hinzugefügt, der Code hinzugefügt mehr Spalten zum Zeitpunkt – engel

0

Ich konnte den Fehler beheben! Der Fehler tritt zuerst auf, weil ich in meiner ursprünglichen Abfrage "=" + Dtp_fecha_cuadre.Text verwendet habe; "das Gleichwertige sendet die Daten in einem int-Format, also musste ich es in" - like "ändern" + Dtp_fecha_cuadre.Value.ToString() + "'";, - aber zu diesem Zeitpunkt füllte es das Datagrid nicht auf, dann kam ich auf die Idee, dass die zu sendende Datumszeichenkette nicht im richtigen Format war, und passte die Abfrage an "like' "+ Dtp_fecha_cuadre.Value.ToString (" yyyy-MM-dd ") +" ' ", und das ist mein Problem zu lösen, alle dank, dass mir hier geholfen - Engel 1 min bearbeitet vor

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(); 
Verwandte Themen