[英]Get an identity value in a controller for INSERT (Execute Insert command and return inserted Id in Sql)
Currently, I am using MVC on creating a project.目前,我正在使用 MVC 创建项目。 Now I want to insert an Identity ID value into an INSERT statement.现在我想在 INSERT 语句中插入一个身份 ID 值。
In my controller:在我的 controller 中:
string payment = @"INSERT INTO Payment(Payment_Method,Currency_Type,Total_Amount)
VALUES('{0}','{1}',{2})";
int pay = DBUtl.ExecSQL(payment, "Cash", currency,total);
if (pay == 1)
{
string pid = "SELECT TOP 1 Payment_id FROM Payment ORDER BY Payment_id DESC";
int paymentid = DBUtl.ExecSQL(pid);
if (cart.Count() != 0)
{
string order = @"INSERT INTO [Order](Order_Name,Order_Description,Order_Quantity,Payment_Id)
VALUES('{0}','{1}',{2},{3})";
Now, I want to the payment_id that already been inserted into the payment
table which is the first statement and retrieve the payment_id and use it into the INSERT statement for the Order
table现在,我想要已经插入到作为第一条语句的payment
表中的 payment_id 并检索 payment_id 并将其用于Order
表的 INSERT 语句
How can I achieve that?我怎样才能做到这一点?
Please Help请帮忙
Thank you谢谢
Actually, DBUtil
code consists of:实际上, DBUtil
代码包括:
public static int ExecSQL(string sql, params object[] list)
{
List<String> escParams = new List<String>();
foreach (object o in list)
{
if (o == null)
escParams.Add("");
else
escParams.Add(EscQuote(o.ToString()));
}
DB_SQL = String.Format(sql, escParams.ToArray());
int rowsAffected = 0;
using (SqlConnection dbConn = new SqlConnection(DB_CONNECTION))
using (SqlCommand dbCmd = dbConn.CreateCommand())
{
try
{
dbConn.Open();
dbCmd.CommandText = DB_SQL;
rowsAffected = dbCmd.ExecuteNonQuery();
}
catch (System.Exception ex)
{
DB_Message = ex.Message;
rowsAffected = -1;
}
}
return rowsAffected;
}
And as you know ExecuteNonQuery
denotes the numbers affecting the row如您所知, ExecuteNonQuery
表示影响行的数字
So, You can do as shown below:因此,您可以执行以下操作:
FOR SQL SERVER 2005 and above适用于 SQL SERVER 2005 及更高版本
using (SqlConnection con=new SqlConnection(@"Your connectionString"))
{
using(SqlCommand cmd=new SqlCommand("INSERT INTO Payment(Payment_Method,Currency_Type,Total_Amount) output INSERTED.Payment_id VALUES(@Payment_Method,@Currency_Type,@Total_Amount)",con))
{
cmd.Parameters.AddWithValue("@Payment_Method", "Cash");
cmd.Parameters.AddWithValue("@Currency_Type", currency);
cmd.Parameters.AddWithValue("@Total_Amount", total);
con.Open();
int payment_id =Convert.ToInt32(cmd.ExecuteScalar());
if (con.State == System.Data.ConnectionState.Open)
con.Close();
return payment_id ;
}
}
also, you can change your query to:此外,您可以将查询更改为:
"INSERT INTO Payment(Payment_Method,Currency_Type,Total_Amount) VALUES(@Payment_Method,@Currency_Type,@Total_Amount)"; SELECT SCOPE_IDENTITY()"
For now, I tried something like this:现在,我尝试了这样的事情:
public IActionResult SaveDetail(List<Cart_Has_Services> cart,double total,string currency)
{
string payment = @"INSERT INTO Payment(Payment_Method,Currency_Type,Total_Amount)
VALUES('{0}','{1}',{2});";
int pay = DBUtl.ExecSQL(payment, "Cash", currency,total);
if (pay == 1)
{
object pid = DBUtl.GetList("SELECT Payment_id FROM Payment");
int paymentid = Convert.ToInt32(pid);
if (cart.Count() != 0)
{
string order = @"INSERT INTO [Order](Order_Name,Order_Description,Order_Quantity,Payment_Id)
VALUES('{0}','{1}',{2},{3})";
foreach (var item in cart)
{
int ord = DBUtl.ExecSQL(order, item.Cart_Service, item.Additional_Notes, item.Quantity,paymentid);
As for now, the codes will run by inserting the values into the payment table.就目前而言,代码将通过将值插入支付表来运行。 After that, I want to get the payment_id for my next insert which is the order table.之后,我想获得下一个插入的 payment_id,即订单表。
The method that I tried to get the payment_id does not work.我尝试获取 payment_id 的方法不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.