2015-08-26 6 views
5

Fehler bei der Konvertierung, wenn der VARCHAR Wert ‚DADE‘ in dem Datentyp int umgewandelt wird.Fehler, wenn die Daten in der Datentabelle binden oder Grid

SQL-Befehl, die ich diese verwenden:

SELECT * FROM p_details 
WHERE LOWER(name) LIKE '%has%ln%' 
AND 
    CODE = 13 
AND 
    T_CODE='H' 

Mein Code ist:

SqlDataReader drr = com4.ExecuteReader(); 
DataTable dt = new DataTable(); 
dt.Load(drr); <--error line 
GridView7.DataSource = dt; 
GridView7.DataBind(); 
+0

bitte setzen einige mehr Code sollte nicht diesen Fehler kommen, weil Sie nicht konvertieren DADE – wiretext

+1

Dies ist die einzige Sache, die ich habe, Abrufen von Daten aus der Datenbank und Schließen der connection.In Datenbanktabelle alle Spalte als varchar, aber ich weiß nicht, warum es in int konvertiert. – krishnakumar

+2

Versuchen Sie statt dessen '' SqlDataAdapter' 'zu verwenden: (var da = neuer SqlDataAdapter (sql, con)) da.Fill (dt); ' –

Antwort

4

In einem Kommentar, den Sie angeben, dass alle Spalten sind varchar und Sie nicht konvertieren alles zu Int, aber Ihre SQL ist WHERE CODE = 13.

So code ist auch ein varchar. Durch die mit dem Vergleich int 13 Sie nicht konvertieren 13-varchar aber umgekehrt konvertieren Sie jeden Wert in code zu einem int.

Warum? Wegen der data type precedence Regel:

  • der Datentyp mit der niedrigeren Priorität wird mit der höheren Priorität in den Datentyp umgewandelt

int hat eine höhere Priorität, so dass alle varchar Werte int umgewandelt werden. Ich nehme an, Sie haben einen Wert 'DADA' in dieser Spalte, die nicht in int konvertiert werden kann.

So ist die Lösung ist einfach, machen es zu einem varchar von '13' anstelle von 13:

SELECT * FROM p_details 
WHERE LOWER(name) LIKE '%has%ln%' 
AND 
    CODE = '13' 
AND 
    T_CODE = 'H' 

von Apart, dass Sie immer SQL-Parameter verwenden sollten SQL-Injektion zu verhindern:

SELECT * FROM p_details 
WHERE LOWER(name) LIKE @lowname 
AND 
    CODE = @code 
AND 
    T_CODE = @tCode 

com4.Parameters.Add("@lowname", SqlDbType.VarChar).Value = "%" + name.ToLower() + "%"); 
com4.Parameters.Add("@code", SqlDbType.VarChar).Value = code; 
com4.Parameters.Add("@tCode", SqlDbType.VarChar).Value = tCode; 
+0

Arbeitete wie Charme, ich dachte, jede Art und Weise wird es Int zu Varchar Blinding ohne nachzudenken über Datentyp Vorrang, Danke konvertieren. – krishnakumar

+1

@ krishnakumar: Sie sehen, wie wichtig es ist, immer den richtigen Typ zu verwenden und implizite Konvertierungen zu vermeiden. –

+1

Ja, Sir, eine der größten Erfahrungen, die ich zu Beginn meiner Karriere von Ihnen gelernt habe. – krishnakumar

Verwandte Themen