首先插入A表
然后去的A表的newid
再插入B表和C表
B,C两表中存在A表的newid
要写在后台程序中 这样的sql事务 该如何写 小弟求教
然后去的A表的newid
再插入B表和C表
B,C两表中存在A表的newid
要写在后台程序中 这样的sql事务 该如何写 小弟求教
解决方案 »
- 动态绑定树形控件问题?
- 问一个关于Linq多层结构的问题!
- .net2005 treeview简单的展开与折叠
- 一个注册的问题
- 小菜求助:关于Textbox
- 一个极小的问题,但是直接影响到项目是否正常开工,兄弟真的好急!!!!
- 提示:尝试创建web项目货打开位于URL"http://localhost:8001/EMall"的web项目时,web芙蕖起报告了以下错误:"无法与服务器建立连接".
- 关于ASP。NET连ACCESS数据库的问题
- 想请教孟子e章,有关.net的数据库连接的困惑
- 在ASP.NET中怎样引用VB里定义的变量啊
- 我正在写一个大的图片网站,图片很多,里面的图片怎么分呢
- 急!急!急!.net安装问题
{
conn.ConnectionString = "";
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
SqlTransaction tran = conn.BeginTransaction;
cmd.Transaction = tran;
try
{
cmd.CommandText = "insert into A(name) values(@name);select @@identity";
cmd.Parameters.AddWithValue("@name", "");
int newid = Convert.ToInt32(cmd.ExecuteScalar());
cmd.CommandText = "insert into b(id) values(@id)";
cmd.Parameters("@id", newid);
//...
tran.Commit();
}
catch
{
tran.Rollback();
}
}
cmd.CommandText = "insert into A(name) values(@name);select @@identity";
是取自增长列吧
就是这个事务 该怎么写呢?求教
插入A表成功后,取A表newid(),再插入B表和C表
insert 一条数据
selelct @newid=@@identity;//取出自动增长值
insert b(id) values(@newid);
insert c(id) values(@newid);
if(.....)
commit
else
rollback
/// 执行sql语句,返回一行一列。。
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns></returns>
public static string GetScalar(string sql)
{
SqlCommand command = new SqlCommand(sql, Connection);
return command.ExecuteScalar().ToString();
}
public static string SelectLastId()
{
string sql = "select max(identitycol) from A";
string Id = GetConnection.GetScalar(sql);
return Id;
}调用SelectLastId()的方法就可以得到A的newId了,这样就可以根据newid插入到B和C了
select top 1 newid from a order by id desc
这就麻烦了,你没有办法保证插入A表后取到最后一次的newid,
这就要考虑用触发器了
循环datatable写成一条很长的SQL,有特定字符分割。
然后使用事务插入到数据库中。
前提是这个dataset里面包含主附表完整的数据。也就是表之间关系已经确定。
public void DoTran()
{ //建立连接并打开
SqlConnection myConn=GetConn();
myConn.Open();
SqlCommand myComm=new SqlCommand();
//SqlTransaction myTran=new SqlTransaction();
//注意,SqlTransaction类无公开的构造函数
SqlTransaction myTran;
//创建一个事务
myTran=myConn.BeginTransaction();
try
{
//从此开始,基于该连接的数据操作都被认为是事务的一部分
//下面绑定连接和事务对象
myComm.Connection=myConn;
myComm.Transaction=myTran; //定位到pubs数据库
myComm.CommandText="USE pubs";
myComm.ExecuteNonQuery();//操作1
myComm.CommandText=""; //操作2
myComm.ExecuteNonQuery();
//提交事务
myTran.Commit();
}
catch(Exception err)
{
myTran.rollback();
throw new ApplicationException("事务操作出错,系统信息:"+err.Message);
}
finally
{
myConn.Close();
}
}
用Select Scope_Identity()也可以
存储过程里,你可以将其赋给一个变量,然后再插入后面的数据
全部一起用事务来确保一致性