2017-09-12 2 views
0

Je suis nouveau à la programmation et j'ai commencé avec C# (Visual Studio 2017 CE);
Je suis en train d'écrire une application et en utilisant un . DataGrid Je suis en train de remplir le DataGrid aide d'une requête à un service C# basé DB (fichier mdf)
Quand je lance l'application et essayer l'instruction de requête que je reçois cette erreur.Remplir Datagrid avec Sql Query en utilisant Date "'Opérande type clash: date est incompatible avec int' '

Operand type clash: date is incompatible with int

au SqlDataReader J'ai testé l'instruction SQL Select dans SQL Se rver et ça marche là-bas. J'ai lu plusieurs questions liées à l'erreur, mais depuis que je suis une recrue à la programmation presque toutes les réponses sont difficiles à comprendre, Merci d'avance pour votre compréhension

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 formaté mais en attente d'examen par les pairs – Niladri

+0

Merci pour l'aide avec le formatage de mes questions! – engel

+0

@engel obtenez-vous une exception à cette ligne? 'DateTime fecha = Convert.ToDateTime (dr [" fecha "]. ToString());' Quoi de neuf? t Le type de données pour la colonne 'fecha' dans votre tableau? – Niladri

Répondre

0

utilise SQL DataAdapter à la place qui est beaucoup plus facile et va se débarrasser de l'erreur

  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

Merci d'avoir pris le temps de répondre, le DataAdapter ré id pas résoudre le problème, je reçois toujours la même erreur à la ligne adapter.fill (dt) – engel

+0

Il ya quelque chose de mal avec la base de données de votre DGV. Définissez-vous les propriétés de la DGV dans votre code? Je supprimerais le DGV du formulaire et rajouterais et verrais si le problème disparaît. Je suppose que vous avez défini l'une des colonnes de la DGV comme un entier et que DataBase a une date dans la colonne. – jdweng

+0

nous avons eu la même pensée, j'ai supprimé ma grille de données et en ai placé une nouvelle sans formation supplémentaire, mais j'ai eu la même erreur: puis changé l'instruction select à la fin de la ligne pour ce "like" + Dtp_fecha_cuadre.Text + " % '"; et l'erreur a disparu mais la grille de données n'affiche que les en-têtes de colonnes DB avec des cellules vides, avant que j'aie fait cela j'ai un DataGrid avec des colonnes ajoutées, le code a ajouté plus de colonnes au moment – engel

0

J'ai été en mesure de corriger l'erreur! l'erreur se produit d'abord parce que dans ma requête originale j'utilisais "=" + Dtp_fecha_cuadre.Text; "l'égal envoie les données dans un format int, donc je devais le changer en" --like "" + Dtp_fecha_cuadre.Value.ToString() + "'";, - - mais à ce stade, il ne remplissait pas la grille de données, alors je suis venu avec l'idée que la chaîne de date envoyée n'était pas dans le bon format, et ajusté la requête à "like" "+ Dtp_fecha_cuadre.Value.ToString (" yyyy-MM-dd ") +" ' ", et ce à résoudre mon problème, merci tout ce qui m'a aidé ici - engel 1 min modifier il y a

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