2016-05-31 8 views
0

Ab jetzt hier ist mein Code:Wert aus der Datenbank nicht sichtbar in Textbox und Einsatzwert rechts Benutzername

protected void Button2_Click(object sender, EventArgs e) 
     { 
      using (SqlConnection scn = new SqlConnection("Data Source = 'PAULO'; Initial Catalog=ShoppingCartDB;Integrated Security =True")) 
      { 
       scn.Open(); 
       SqlCommand cmd = new SqlCommand(@"UPDATE UserData SET CreditRequest = 
        CAST(REPLACE(CreditRequest, ',', '') as int) 
        FROM CreditRequests Where [email protected]; 
        SELECT CreditRequest FROM UserData 
        WHERE [email protected]", scn); 
       cmd.Parameters.Add("@Username", SqlDbType.NVarChar).Value = Session["New"]; 

       object value = cmd.ExecuteScalar(); 

       if (value != null) 
        txtCredit.Text = value.ToString(); 
      } 
      } 
     } 

Allerdings, wenn ich in meiner Datenbank suche, wird der Kreditanforderungswert der eingeführt wird Datenbank und macht neue IDs und alles ist NULL.

Beispiel

ID NULL Username NULL Email NULL Contact NULL Creditrequest 5,000 

Gibt es eine Möglichkeit, die Kreditanfrage Wert rechts Benutzernamen einzufügen. Was fehlt mir in meinem Code?

Auch ich möchte, dass Kredit-Anfrage-Wert in meinem Textfeld angezeigt werden, und ich glaube, dass es diese Codezeile?

if (value != null) 
    txtCredit.Text = value.ToString(); 
+0

scheinen Sie nicht verstehe die richtigen Konzepte von SQL. Bitte werfen Sie einen Blick hier: http://www.w3schools.com/sql/sql_intro.asp Insbesondere überprüfen Sie die 'INSERT',' UPDATE' und 'SELECT', und erfahren Sie, was sie tun, und wann Sie sollten benutze sie. –

Antwort

1

Sie rufen eine INSERT-Anweisung auf, die einen neuen Datensatz hinzufügt. Und nein, das Hinzufügen einer WHERE-Klausel am Ende transformiert eine insert-Anweisung nicht in eine update-Anweisung.

Wenn Sie einen vorhandenen Datensatz aktualisieren möchten, dann rufen Sie

SqlCommand cmd = new SqlCommand(@"UPDATE UserData SET CreditRequest = 
        (SELECT CAST(REPLACE(c.CreditRequest, ',', '') as int) 
        FROM CreditRequests c Where [email protected])", scn); 

Für den zweiten Teil Ihrer Frage, ist nicht möglich, den Rückgabewert von ExecuteScalar in diesem Zusammenhang zu erhalten, weil UPDATE jede nicht wählen Rekord um zurückzukehren. Wenn Sie diesen Wert zurück bekommen möchten können Sie zwei Anweisung ausführen zusammen, um sie durch ein Semikolon getrennt:

SqlCommand cmd = new SqlCommand(@"UPDATE UserData SET CreditRequest = 
        (SELECT CAST(REPLACE(c.CreditRequest, ',', '') as int) 
        FROM CreditRequests c Where [email protected]); 
        SELECT CreditRequest FROM UserData u 
        WHERE [email protected]", scn); 

Beide Anweisungen ausgeführt werden, aber ExecuteScalar in der Lage, die Credit zurückzukehren aktualisiert

+0

Falsche Syntax in der Nähe des Schlüsselwortes 'SELECT'. –

+0

("UPDATE UserData SET CreditRequest = SELECT CAST (ERSETZEN (CreditRequest, ',', '') als int) FROM CreditRequests Mit Benutzername = @ Benutzername", scn); –

+0

Ja SELECT könnte entfernt werden – Steve