我想显示最后插入行的预订ID。我在下面给出了插入代码。请任何人都可以给我代码来显示id
protected void Button1_Click(object sender, EventArgs e)
{
string cs = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd;
SqlDataReader dr;
con.Open();
cmd = new SqlCommand("insert into [booking] values('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "','" + TextBox9.Text + "','" + TextBox10.Text + "','" + TextBox11.Text + "')", con);
cmd.ExecuteNonQuery();
}
}
答案 0 :(得分:1)
我建议使用这样的东西:
protected void Button1_Click(object sender, EventArgs e)
{
var cs = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
using (var con = new SqlConnection(cs))
{
con.Open();
var cmd = new SqlCommand(
"DECLARE @IDReturnTable TABLE( ID INT ); INSERT INTO [booking] OUTPUT INSERTED.NameOfYourIdColumn INTO @IDReturnTable VALUES(@param1, @param2, @param3); SELECT ID FROM @IDReturnTable",
con);
cmd.Parameters.Add("@param1", SqlDbType.VarChar).Value = TextBox1.Text;
cmd.Parameters.Add("@param2", SqlDbType.VarChar).Value = TextBox2.Text;
cmd.Parameters.Add("@param3", SqlDbType.VarChar).Value = TextBox3.Text;
var returnedId = cmd.ExecuteScalar();
}
}
我没有使用所有11个文本框,只用3来说明这种技术。
答案 1 :(得分:0)
您最好将此作为存储过程,并且不太容易注射。
要使用当前代码实现此功能,请添加对;SELECT SCOPE_IDENTITY()
的调用:
cmd = new SqlCommand("insert into [booking] values('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "','" + TextBox9.Text + "','" + TextBox10.Text + "','" + TextBox11.Text + "');SELECT SCOPE_IDENTITY()", con);
var id = cmd.ExecuteScalar();
(这假设你的桌子上有一个标识栏)
将其作为存储过程执行:
如果您拥有有限数量的值,则可以正常创建存储过程,每个@Parameter
只有TextBox.Text
,但最后会SELECT SCOPE_IDENTITY()
。
但看起来你有一个可变数量的输入,所以请参阅How to insert a multiple rows in SQL using stored procedures?,其中概述了使用表参数的方法和使用UDF分割值列表的方法。
同样,你需要在proc结尾处SELECT SCOPE_IDENTITY()
来获取最后一行的标识。
有关选择上次插入ID的方法的详细讨论,请参阅What is the difference between Scope_Identity(), Identity(), @@Identity, and Ident_Current?