【发布时间】:2016-11-27 07:21:25
【问题描述】:
public void Insert(Order order)
{
SqlConnection con = DACHelper.GetConnection();
SqlCommand cmd = new SqlCommand(INSERT, con);
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.AddWithValue("@Category_Id", order.Category.Id);
cmd.Parameters.AddWithValue("@Item_Id", order.Item.Id);
con.Open();
using (con)
{
SqlTransaction tran = con.BeginTransaction();
cmd.Transaction = tran;
try
{
order.Id= Convert.ToInt32(cmd.ExecuteScalar());
new OrderMailsDAC().Insert(order.Id, order.Mail , tran);
tran.Commit();
}
catch (Exception)
{
tran.Rollback();
throw;
}
}
}
然后我在 OrderMails 类的以下 Insert 函数中插入了 order.Id。
public void Insert(int orderId,OrderConfirmationMail mails,SqlTransaction tran)
{
SqlConnection con = tran.Connection;
SqlCommand cmd = new SqlCommand(INSERT, con);
cmd.CommandType = System.Data.CommandType.Text;
cmd.Transaction = tran;
cmd.Parameters.AddWithValue("@Mail", mails.Mail);
cmd.Parameters.AddWithValue("@Order_Id", orderId);
cmd.ExecuteNonQuery();
}
这里的问题是 order.Id 值在插入 OredrMail 的另一个 Insert 时会在该位置存储零。列是自动递增的,我们存储在 Order 表中的 ad.Id ...
【问题讨论】:
-
能否显示INSERT查询的真实文本?
-
顺便说一句 - 最好将
throw ex更改为throw。throw按原样重新抛出异常,包括堆栈跟踪。如果你throw ex堆栈跟踪从那里开始,之前的所有内容都会丢失。
标签: c# asp.net asp.net-mvc-4