2009-08-20 8 views
0

Ich bin zwei Tabellen - Kontakt und RetailTrainingUserLevelMap in einer Select-Anweisung."Eingabe Zeichenfolge war nicht in einem korrekten Format" bei der Verwendung von SqlDataReader und Label

(Die gemeinsame Spalte in sowohl der RetailTrainingUserLevelID int)

SELECT Contact.IntranetUserName, Contact.CompanyName, RetailTrainingUserLevelMap.RetailTrainingUserLevel

von Kontakt

INNER JOIN RetailTrainingUserLevelMap ON Contact.RetailTrainingUserLevelID = RetailTrainingUserLevelMap .RetailTrainingUserLevelID

AND Kontakt.RetailTrainingUserLevelID = RetailTrainingUserLevelMap.RetailTrai ningUserLevelID

WHERE (Contact.IntranetUserName = @IntranetUserName)


Wenn ich diese Aussage durch Visual Studio Query Builder (das Testabfragefenster) ausführen und einen Wert für "IntranetUserName" eingeben erhalte ich:

IntranetUserName:
John Joe

Company:
Acme Inc.

RetailTrainingUserLevel:
-Manager

Dies ist meine gewünschte Ausgabe, so weit so gut.

Wenn ich diese gleiche select-Anweisung in meinem .cs Code-Behind ein SqlDataReader mit Etiketten dieser Spalten wie folgt Einige zu binden:

SqlCommand comm; 
     SqlConnection conn; 
     string intranetConnectionString = ConfigurationManager.ConnectionStrings["DataConnect"].ConnectionString; 
     conn = new SqlConnection(intranetConnectionString); 
     comm = new SqlCommand("SELECT Contact.IntranetUserName, Contact.CompanyName, RetailTrainingUserLevelMap.RetailTrainingUserLevel FROM Contact INNER JOIN RetailTrainingUserLevelMap ON Contact.RetailTrainingUserLevelID = RetailTrainingUserLevelMap.RetailTrainingUserLevelID AND Contact.RetailTrainingUserLevelID = RetailTrainingUserLevelMap.RetailTrainingUserLevelID WHERE (Contact.IntranetUserName = @IntranetUserName)", conn); 

     comm.Parameters.Add("@IntranetUserName", System.Data.SqlDbType.VarChar, 50); 
     comm.Parameters["@IntranetUserName"].Value = memberLoginName; 

     conn.Open(); 
     SqlDataReader reader = comm.ExecuteReader(); 
     while (reader.Read()) 
     { 
      memberCompanyNameLabel.Text += reader["CompanyName"]; 
      userLevelLabel.Text += reader["RetailTrainingUserLevel"]; 
     } 

     reader.Close(); 
     conn.Close(); 

erhalte ich die Fehler „Eingabezeichenfolge war nicht in einem korrekten Format." hier:
userLevelLabel.Text + = Leser ["RetailTrainingUserLevel"];

Was C# Syntax muss hier geändert werden, damit ich diesen Wert korrekt an meine userLevelLabel gebunden bekommen kann?

Hinweis: RetailTrainingUserLevelID int
RetailTrainingUserLevel varchar (50)

Vielen Dank für Ihre Zeit und Wissen.

Antwort

0

Sie sicher Leser ["RetailTrainingUserLevel"] ist nicht DBNull ??

möglicherweise tun. ToString() auf, bevor Sie versuchen, es zu einer anderen Zeichenfolge hinzuzufügen.

ich tun würde, nur

userLevelLabel.Text += reader["RetailTrainingUserLevel"].ToString(); 
+0

Hallo Stan, Die "RetailTrainingUserLevel" gesetzt ist nicht null zu ermöglichen. Ich habe Ihren Code Vorschlag versucht und bekomme immer noch den Fehler: "Eingabe String war nicht in einem korrekten Format." at userLevelLabel.Text + = Leser ["RetailTrainingUserLevel"]. ToString(); Ich bin verwirrt darüber, warum es ein Problem gibt. Der Leser möchte einen "RetailTrainingUserLevel" -Wert, der in der Tabelle auf varchar gesetzt ist - die möglichen Werte sind Manager, Supervisor, Principal, die mir alle wie Strings erscheinen. Ich bin mir nicht sicher, was ich sonst noch versuchen sollte. Ist meine JOIN-Anweisung nicht korrekt eingerichtet? Danke für weitere Ideen, die Sie vielleicht haben ... – Doug