2016-05-22 5 views
-2

Ich verwende SQL-Abfrage mit SELECT SCOPE_IDENTITY() in sqlcommand. Hier ist mein Code:Warum wählen scope_identity() 1 für SQL-Abfrage in C# zurück?

SqlCommand cmd = new SqlCommand("INSERT INTO tbl_Supplier(Supplier_Name,Supplier_Address, Supplier_PhoneNo,Supplier_City,Supplier_Remarks) VALUES('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','"+DropDownList1.SelectedItem+"','"+TextBox4.Text+"') RETURN SCOPE_IDENTITY()", conn); 
      var id = cmd.ExecuteScalar(); 
      conn.Close(); 

aber der Code wird immer 1 zurück? Bitte helfen Sie mir, das Problem zu lösen

+0

Ihr Code enthält nicht 'select scope_identity()', darin ist 'return scope_identity()' enthalten. 'select' und' return' machen verschiedene Dinge. Bitte korrigieren Sie Ihre Frage, um zu sagen, welche Sie verwenden. – hvd

+0

Sowohl Rückgabe als auch Auswahl werden zurückgegeben 1 – Iqra

Antwort

3

Sie verwenden die falsche Syntax, um diese Informationen zu erhalten.

"...; SELECT SCOPE_IDENTITY()" 

(Beachten Sie auch das Semikolon vor dem SELECT und nach dem Ende der ersten SQL-Anweisung)

An diesem Punkt die ExecuteScalar in der Lage, die erste Spalte der ersten Zeile von den SELECT

zurückgegeben zu bekommen

Sagten, dass Sie ein wenig Ihrer Zeit in Anspruch nehmen zu lernen, wie "Parameterized Queries" Ihr Code auszuführen ist sehr schwach und ein leichtes Ziel für Sql Injection

string cmdText = @"INSERT INTO tbl_Supplier 
        (Supplier_Name, 
        Supplier_Address, 
        Supplier_PhoneNo, 
        Supplier_City, 
        Supplier_Remarks) 
        VALUES(@name, @address, @phone, @city, @remarks); 
        SELECT SCOPE_IDENTITY()" 

using(SqlCommand cmd = new SqlCommand(cmdText, connection)) 
{ 
    connection.Open(); 
    cmd.Parameters.Add("@name", SqlDbType.NVarWChar).Value = TextBox1.Text; 
    cmd.Parameters.Add("@address", SqlDbType.NVarWChar).Value = TextBox2.Text; 
    cmd.Parameters.Add("@phone", SqlDbType.NVarWChar).Value = TextBox3.Text; 
    cmd.Parameters.Add("@city", SqlDbType.NVarWChar).Value = DropDownList1.SelectedItem 
    cmd.Parameters.Add("@remarks", SqlDbType.NVarWChar).Value = TextBox4.Text; 

     var id = cmd.ExecuteScalar(); 
} 
conn.Close(); 
+0

... VALUES ('"+ TextBox1.Text +"', '"+ TextBox2.Text +"', "" + TextBox3.Text + "'," "+ DropDownList1.SelectedItem + "','" + TextBox4.Text + "'; SELECT SCOPE_IDENTITY()", conn); – Iqra

+0

sollte ich diesen Weg verwenden? – Iqra

+0

Für den SCOPE_IDENTITY-Teil, ja. Für die erste Anweisung sollten Sie eine parametrisierte Abfrage verwenden. – Steve

Verwandte Themen