2016-03-31 13 views
0

Ich versuche, eine Tabelle aus meiner Datenbank zu drucken, aber ich will es filtern, diesen Block-Code, was ich tun möchte, ist Druck die Daten zwischen zwei Stunden, aber ich don ‚t wissen, ist das Eingabeformat der Stunde korrekt ist, also hier ist der Code:C# Erhalten Sie Daten zwischen Datum und Uhrzeit von MySQL-Tabelle

string horaI=null; 
    string horaF=null; 
    string[] hr1 = null; 
    string[] hr2 = null; 

    on load.... 
    dateTimePicker1.CustomFormat = "HH:mm tt"; // Only use hours and minutes 
    horaI = dateTimePicker1.Value.ToString("HH:mm tt"); 
    hr1 = horaI.Split(); 

    string connectionstring = null; 
    string sql = null; 
    string data = null; 

    connectionstring = "server=127.0.0.1; database=gimnasio5; uid=root; pwd=0000000000;"; 

     sql = "SELECT IdMembresia, Nombre, Apellido, Tipo, Fecha_Inicio, 
    Fecha_Vencimiento, Inscripcion, Total,Impreso_Corte FROM membresia where 
    Impreso_Corte='No impreso' or (Fecha_Membresia between @d1 and @d2 and 
    Hora_Membresia between @d3 and @d4) order by gimnasio5.membresia.IdMembresia;"; 

     var dtable = new DataTable("membresia"); 
     var conn = new MySql.Data.MySqlClient.MySqlConnection(connectionstring); 
     var cmd = new MySql.Data.MySqlClient.MySqlCommand(sql, conn); 
     var dscmd = new MySql.Data.MySqlClient.MySqlDataAdapter(cmd); 

     using (conn) 
     { 

      var param = new MySql.Data.MySqlClient.MySqlParameter("@d1", MySql.Data.MySqlClient.MySqlDbType.Date); 
      param.Direction = ParameterDirection.Input; 
      param.Value = DateTime.Today; 
      cmd.Parameters.Add(param); 
      param = new MySql.Data.MySqlClient.MySqlParameter("@d2", MySql.Data.MySqlClient.MySqlDbType.Date); 
      param.Direction = ParameterDirection.Input; 
      param.Value = DateTime.Today; 
      cmd.Parameters.Add(param); 

//The error can be here because when I use it with dates only it works fine 
//but when I add this part of code, fails. 

      param = new MySql.Data.MySqlClient.MySqlParameter("@d3", MySql.Data.MySqlClient.MySqlDbType.Time); 
      param.Direction = ParameterDirection.Input; 
      param.Value = hr1[0]; //Convert.ToDateTime(hr1[0]).ToString("HH:mm"); 
      cmd.Parameters.Add(param); 
      param = new MySql.Data.MySqlClient.MySqlParameter("@d4", MySql.Data.MySqlClient.MySqlDbType.Time); 
      param.Direction = ParameterDirection.Input; 
      param.Value = hr2[0]; //Convert.ToDateTime(hr2[0]).ToString("HH:mm"); 
      cmd.Parameters.Add(param); 

      conn.Open(); 
      dscmd.Fill(dtable); 
     } 

But Im geting and error: An exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dll but was not handled in user code

Additional information: Fatal error encountered during command execution.

ich den Fehler, wenn ich versuche, das MySqlAdapter Objekt zu füllen:

dscmd.Fill(dtable);

ich dachte, es war das Format, in das ich die Zeit eingegeben habe, b ut, wie Sie in den Code sehen, den ich für Formulare verwende, aber keiner von beiden funktioniert und gibt den gleichen Fehlercode zurück. Meine Spalte in der MySQL-Datenbank ist so eingestellt, dass der Zeittyp gespeichert wird, daher ist das Problem nicht in der Tabelle.

Die Stunde in der Datenbank wie diese gespeichert wird, ist der Spalt Zeittyp:

12:03:00

21:34:00

Dank fortschrittlicher.

Tabellenstruktur

CREATE TABLE `membresia` (
    `IdMembresia` int(11) NOT NULL AUTO_INCREMENT, 
    `Nombre` varchar(100) NOT NULL, 
    `Apellido` varchar(100) NOT NULL, 
    `Tipo` varchar(100) NOT NULL, 
    `Fecha_Inicio` date NOT NULL, 
    `Fecha_Vencimiento` date NOT NULL, 
    `Inscripcion` varchar(20) DEFAULT NULL, 
    `Estado_membresia` varchar(15) NOT NULL, 
    `Fecha_modificacion` date NOT NULL, 
    `Total` decimal(10,2) NOT NULL, 
    `Nota` varchar(200) DEFAULT NULL, 
    `Fecha_Membresia` date NOT NULL, 
    `Impreso_Corte` varchar(20) NOT NULL, 
    `IdSocio` int(11) DEFAULT NULL, 
    `Hora_Membresia` time NOT NULL, 
    PRIMARY KEY (`IdMembresia`), 
    KEY `L_Id2` (`IdSocio`), 
    KEY `F_Nombre` (`Nombre`), 
    KEY `F_Apelli` (`Apellido`), 
    CONSTRAINT `F_Apelli` FOREIGN KEY (`Apellido`) REFERENCES `socios` (`Apellido`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `F_Nombre` FOREIGN KEY (`Nombre`) REFERENCES `socios` (`Nombre`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `L_Id2` FOREIGN KEY (`IdSocio`) REFERENCES `socios` (`IdSocio`) ON DELETE CASCADE ON UPDATE CASCADE) 
    ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

Können Sie bitte mit uns Ihre Tabellenstruktur teilen? – bluetoothfx

+0

ja ich die Struktur schreiben jetzt können Sie es sehen – user2461687

+0

Sie brauchen nicht verwenden (conn) diese Methode ... bearbeiten gerade diese Abfrage nach Ihrer Anwendung. Du musst Zeit von datetimepicker verabreichen ... sag mir, ob du Probs hast. – bluetoothfx

Antwort

1

-Code wie auf diese Weise:

 SqlConnection conn = new SqlConnection("server=127.0.0.1; database=gimnasio5; uid=root; pwd=0000000000;"); 

     conn.Open(); 

     string query = string.Format(@"SELECT IdMembresia, Nombre, Apellido, Tipo, Fecha_Inicio, 
         Fecha_Vencimiento, Inscripcion, Total, Impreso_Corte FROM membresia where 
         Impreso_Corte = 'No impreso' or(Fecha_Membresia between '{0}' and '{1}' and 
         Hora_Membresia between '{2}' and '{3}') order by gimnasio5.membresia.IdMembresia", dateTimePicker1.Value.ToShortDateString(), dateTimePicker2.Value.ToShortDateString(), dateTimePicker3.Value.ToString("hh:mm:ss"), dateTimePicker4.Value.ToString("hh:mm:ss")); 

     SqlCommand cmd = new SqlCommand(query, conn); 

     DataTable dt = new DataTable(); 
     dt.Load(cmd.ExecuteReader()); 
     conn.Close(); 
     return dt; 
+0

Ich versuche, in meinem Code zu setzen :) – user2461687

+0

Ja, ich codierte die gleiche Art und Weise – user2461687

+0

es mir jetzt nicht den Fehler nicht geben, aber ich bin nicht immer Daten – user2461687