2009-08-19 2 views
0
string sql="", sql2 = "", rank=""; 
int basic_wage, rent_allowance, seniority_allowance, overtime_rate; 

sql += "select rank, Basic_Wage,Rent_Allowance,Seniority_Allowance,Overtime_rate from Designation_Details where Designation_ID=(select Designation_ID from Officer where Member_ID=" + id + ")"; 

sql2 += "select Overtime_Hours from Officer where Member_ID=" + id; 

DataTable dtable1 = DataAccess.GetDataTable(sql); 
DataTable dtable2 = DataAccess.GetDataTable(sql2); 

rank+=dtable1.Rows[0].ItemArray[0]; 
basic_wage = dtable1.Rows[0].ItemArray[1]; 
rent_allowance = dtable1.Rows[0].ItemArray[2]; 
seniority_allowance = dtable1.Rows[0].ItemArray[3]; 
overtime_rate = dtable1.Rows[0].ItemArray[4]; 

bBasic_Wage, Rent_Allowance, Seniority_Allowance und Overtime_rate sind alle int-Datentypen in der Tabelle.Abrufen von ganzen Zahlen aus den Tabellen in C# (VS 2005) unter Verwendung von SQL-Befehlen

Die Fehlermeldung lautet:

.... kann nicht implizit Objekt int konvertieren. Eine explizite Umwandlung existiert ...

Antwort

1

Sie müssen nur die Werte auf ganze Zahlen werfen:

rank += Convert.ToInt32(dtable1.Rows[0].ItemArray[0]); 

oder

rank += (int)(dtable1.Rows[0].ItemArray[0]); 
+0

vielen Dank! :) Ich hätte nie gedacht, dass ich eine so schnelle Antwort bekommen würde. –

2

Verwenden Sie die Convert.ToInt32, sie manchmal als Dezimalzahl kommen zurück , aber immer noch den richtigen Wert haben.

Auch wenn möglich, verwenden Sie mindestens Spaltennamen, keine Indizes. Andere Entwickler finden diese Angewohnheit sehr ärgerlich.

+0

danke für den Tipp. der Gedanke kam nie zu mir. es verbessert die Lesbarkeit ziemlich. –

1

[Ich möchte einen Kommentar hinterlassen, aber ich habe nicht 15 zufällige Punkte ...]

1 - Per Yuriy sollten Sie Spaltennamen verwenden. Es macht nicht nur das Lesen einfacher, sondern macht Ihren Code robuster, wenn (und wenn) jemand Ihre SQL-Abfrage bearbeitet. Dies wird in 2 Jahren geschehen, wenn Sie nicht mehr am Projekt teilnehmen, aber es ist nett, nett zu sein.

2 - Sie müssen sich an die Verwendung von Bind-Variablen gewöhnen. Ihr aktueller Code ist für SQL-Injection-Angriffe geeignet und möglicherweise auch ineffizient (abhängig davon, wie Ihre Datenbank eingerichtet ist). Vertrauen Sie mir (obwohl ich 1 Punkt habe), dass dies Sie irgendwann später retten wird - vielleicht nicht bei diesem Projekt - aber es wird irgendwann

Verwandte Themen