繁体   English   中英

为什么select scope_identity()对于SQL查询返回1?

[英]Why is select scope_identity() returning 1 for SQL query?

我在sqlcommand中使用SQL查询和SELECT SCOPE_IDENTITY() 这是我的代码:

 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();

但是代码总是返回1?

您使用错误的语法来获取该信息。

"...; SELECT SCOPE_IDENTITY()"

(还请注意在SELECT之前和第一个sql语句结束之后的分号)

此时,ExecuteScalar能够获取SELECT返回的第一行的第一列

话虽如此,请花点时间学习如何执行“参数化查询”,因为您的代码非常弱,并且是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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM