16 个解决方案
#1
三张表,一个sql,你怎么也完不成一个insert到三个表吧,要么你写三个sql,要么写个存储过程
#2
删除的时候,先删从表,再删主表
操作均可以利用存贮过程,或者触发器来实现数据的同步更新
操作均可以利用存贮过程,或者触发器来实现数据的同步更新
#3
就是不能用存储过程了,我听着别人说主表用实体类,其它的两张表用Hash把两张从表的传过去,但是听的云里雾里的
#4
先插入主表,立即查询出来 插入主表的主键,如果主键是GUID 就不需要查了,C#代码就可以得到, 如果主键用的自增 用 SELECT @@IDENTITY,查询,后面2个插入语句都是基于这个主键ID的插入语句,注意事务处理,基本思路就是这样吧
#5
能不能给点代码
#6
怎么没人呢?给点代码参考
#7
那你改成 用程序来实现咯 依次执行3条SQL。
#8
- - 一条sql语句 无法完成你的要求- -
要么用代码第一条写入 读出id 然后根据id去插入后面的
要么存储过程。 类似于第一种 只是你只用调用一下就可以了。
在一种就看你的表 是不是每次都需要 如果是的话 用触发器也可以。
要么用代码第一条写入 读出id 然后根据id去插入后面的
要么存储过程。 类似于第一种 只是你只用调用一下就可以了。
在一种就看你的表 是不是每次都需要 如果是的话 用触发器也可以。
#9
我自己写的不知道这样写可以不
StringBuilder strSql = new StringBuilder();
//定义策略ID
strSql.Append("declare @npsid int;");
//插入策略表
strSql.Append("insert into ME_NewProductStrategy values('" + model.nps_title + "','" + model.nps_cost + "','" + model.product_id + "','" + model.nps_model + "','"
+ model.nps_pack + "','" + model.nps_cost_basic + "','" + model.nps_cost_attribute + "','" + model.nps_cost_pack + "','" + model.nps_cost_materials + "','"
+ model.nps_cost + "','" + model.nps_index + "','" + model.nps_image + "');");
//获取策略ID
strSql.Append("select @npsid=@@IDENTITY;select @npsid;");
//添加原材料组成表
strSql.Append("insert into ME_NewProductStrategy_Materials values(@pa_id,'"+ mamodel.materials_id + "','" + mamodel.materials_name + "'");
//添加新产品属性表
strSql.Append("insert into ME_NewProductStrategy_Attribute values(@pa_id,'" + attmodel.attr_id+ "','" + attmodel.attr_name + "'");
#10
一定要写一个sql语句也可以,用触发器
#11
在执行这些SQL 记得使用事务。
#12
在执行这些SQL 记得使用事务。
#13
楼主第一张表的ID是自动生成的还是插入的啊?如果是插入的你可以试试下面的:
public bool Test_Add(int id,'','')
{
string str = "insert into table1 values(ID,'','')";
cmd = SqlHelper.CreateDbCommand(str, conn);
cmd.Parameters.AddRange(parm);
conn.Open();
int result = cmd.ExecuteNonQuery();
return (result > 0) ? true : false;
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
if(Test_Add)
{
string str = "insert into table2 values(,ID,)";
cmd = SqlHelper.CreateDbCommand(str, conn);
cmd.Parameters.AddRange(parm);
conn.Open();
int result = cmd.ExecuteNonQuery();
if(result>0)
{
string str = "insert into table3 values(,ID,)";
cmd = SqlHelper.CreateDbCommand(str, conn);
cmd.Parameters.AddRange(parm);
conn.Open();
int result = cmd.ExecuteNonQuery();
}
}
#14
提供两种常用方法,也是最笨的方法:
1,在ADO.NET中,启用事务,执行3次,3条语句;
2,使用DBMS的触发器,在主键表上建议插入触发器,级联插入数据到另两外键表
1,在ADO.NET中,启用事务,执行3次,3条语句;
2,使用DBMS的触发器,在主键表上建议插入触发器,级联插入数据到另两外键表
#15
自己已经搞定了,谢谢各位
#16
老大 你是怎么搞定的啊 我也想学习学习
#1
三张表,一个sql,你怎么也完不成一个insert到三个表吧,要么你写三个sql,要么写个存储过程
#2
删除的时候,先删从表,再删主表
操作均可以利用存贮过程,或者触发器来实现数据的同步更新
操作均可以利用存贮过程,或者触发器来实现数据的同步更新
#3
就是不能用存储过程了,我听着别人说主表用实体类,其它的两张表用Hash把两张从表的传过去,但是听的云里雾里的
#4
先插入主表,立即查询出来 插入主表的主键,如果主键是GUID 就不需要查了,C#代码就可以得到, 如果主键用的自增 用 SELECT @@IDENTITY,查询,后面2个插入语句都是基于这个主键ID的插入语句,注意事务处理,基本思路就是这样吧
#5
能不能给点代码
#6
怎么没人呢?给点代码参考
#7
那你改成 用程序来实现咯 依次执行3条SQL。
#8
- - 一条sql语句 无法完成你的要求- -
要么用代码第一条写入 读出id 然后根据id去插入后面的
要么存储过程。 类似于第一种 只是你只用调用一下就可以了。
在一种就看你的表 是不是每次都需要 如果是的话 用触发器也可以。
要么用代码第一条写入 读出id 然后根据id去插入后面的
要么存储过程。 类似于第一种 只是你只用调用一下就可以了。
在一种就看你的表 是不是每次都需要 如果是的话 用触发器也可以。
#9
我自己写的不知道这样写可以不
StringBuilder strSql = new StringBuilder();
//定义策略ID
strSql.Append("declare @npsid int;");
//插入策略表
strSql.Append("insert into ME_NewProductStrategy values('" + model.nps_title + "','" + model.nps_cost + "','" + model.product_id + "','" + model.nps_model + "','"
+ model.nps_pack + "','" + model.nps_cost_basic + "','" + model.nps_cost_attribute + "','" + model.nps_cost_pack + "','" + model.nps_cost_materials + "','"
+ model.nps_cost + "','" + model.nps_index + "','" + model.nps_image + "');");
//获取策略ID
strSql.Append("select @npsid=@@IDENTITY;select @npsid;");
//添加原材料组成表
strSql.Append("insert into ME_NewProductStrategy_Materials values(@pa_id,'"+ mamodel.materials_id + "','" + mamodel.materials_name + "'");
//添加新产品属性表
strSql.Append("insert into ME_NewProductStrategy_Attribute values(@pa_id,'" + attmodel.attr_id+ "','" + attmodel.attr_name + "'");
#10
一定要写一个sql语句也可以,用触发器
#11
在执行这些SQL 记得使用事务。
#12
在执行这些SQL 记得使用事务。
#13
楼主第一张表的ID是自动生成的还是插入的啊?如果是插入的你可以试试下面的:
public bool Test_Add(int id,'','')
{
string str = "insert into table1 values(ID,'','')";
cmd = SqlHelper.CreateDbCommand(str, conn);
cmd.Parameters.AddRange(parm);
conn.Open();
int result = cmd.ExecuteNonQuery();
return (result > 0) ? true : false;
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
if(Test_Add)
{
string str = "insert into table2 values(,ID,)";
cmd = SqlHelper.CreateDbCommand(str, conn);
cmd.Parameters.AddRange(parm);
conn.Open();
int result = cmd.ExecuteNonQuery();
if(result>0)
{
string str = "insert into table3 values(,ID,)";
cmd = SqlHelper.CreateDbCommand(str, conn);
cmd.Parameters.AddRange(parm);
conn.Open();
int result = cmd.ExecuteNonQuery();
}
}
#14
提供两种常用方法,也是最笨的方法:
1,在ADO.NET中,启用事务,执行3次,3条语句;
2,使用DBMS的触发器,在主键表上建议插入触发器,级联插入数据到另两外键表
1,在ADO.NET中,启用事务,执行3次,3条语句;
2,使用DBMS的触发器,在主键表上建议插入触发器,级联插入数据到另两外键表
#15
自己已经搞定了,谢谢各位
#16
老大 你是怎么搞定的啊 我也想学习学习