同时写入两个表,怎么写比较好?

kivetja 2008-01-13 11:29:41
表A(产品表):
PID 自动编号
Pname
PclassID
Px1
Px2

表B(产品类表):
CID 自动编号
Cname
Cx1
Cx2

下面是一个快速添加的表单,
产品类名称(Cname):_______
产品类说明(Cx1):_______
产品名称(Pname):_______
产品说明(Px1):_______

同时要写入产品和产品类,请问用什么控件比较好,还有就是“产品表”中PclassID 应该是和“产品类表”中的CID对应的,
第一次写ASP.net,特来求救。
...全文
174 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Erice 2008-01-13
  • 打赏
  • 举报
回复
这个我就不能帮你了!我没写过 web前台,这方面 我纯属一个白痴! 恕我心有余,而力不足!

建议 找Demo。这方面的应该很多!
kivetja 2008-01-13
  • 打赏
  • 举报
回复
就差完整的代码了,我不知道用什么控件进行提交,然后怎么样怎么搞,

上头要求代码分离,我以前都写ASP的,现在叫我一下搞出个.net的页面,很困难。

可惜只有这点分了,要不然再给热心的朋友送点分。
Erice 2008-01-13
  • 打赏
  • 举报
回复
第3种 如下 首先是 Model 。构造的是 寄予源数据表的,横向扩展的数据对象(实际上是View对象。)

namespace Models
{
[Serializable]
[Entity("Models.Users", "Users")]
[EntityID(EntityIDType.Identity, "Id")]
public class Users
{
private string userCode = string.Empty;
[Field("UserNo",typeof(string),30,1)]
public string UserCode
{
get { return userCode; }
set { userCode = value; }
}

private string userName = string.Empty;
[Field("UserName",typeof(string),30,2)]
public string UserName
{
get { return userName; }
set { userName = value; }
}

private int id;

[Field("ID", typeof(int), 30,true,true)]
public int Id
{
get { return id; }
set { id = value; }
}

private string departCode;
[Field("DepartNo", typeof(string))]
public string DepartCode
{
get { return departCode; }
set { departCode = value; }
}

private string departName = string.Empty;
[Field("departName", typeof(string),false,false,true)]
[Relation(typeof(Departments), "DepartCode", RelationType.OneToMany)]
public string DepartName
{
get { return departName; }
set { departName = value; }
}

private string address;
[Field("address", typeof(string), false, false, true)]
[Relation(typeof(Departments), "DepartCode", RelationType.OneToMany)]
public string Address
{
get { return address; }
set { address = value; }
}

}



入后 使用新增


private void btnInsert_Click(object sender, EventArgs e)
{
Users user=new Users();
user.UserCode = "200001";
user.UserName = "TestModelORM";
user.DepartCode = "000002";
EntityFactory factory = new EntityFactory();
if (factory.InsertObject<Users>(user))
{
MessageBox.Show(user.Id.ToString());
}
//info.RemoteService<bool>("BusinessProcess","InsertEntity",new object[]{user});

}

插入后,此时的Id值为当前的自增id。
Erice 2008-01-13
  • 打赏
  • 举报
回复
写的简单,偷懒使用的第2种

string sqlInsert="insert into table(.....)values (......);select SCOPE_IDENTITY() "
SqlCommand command=new SqlCoomand(你的连接,sqlInsert);
command.CommandType = CommandType.Text;
int primaryKeyID=command.ExecuteScalar();

.....




然后是你的detail表。
kivetja 2008-01-13
  • 打赏
  • 举报
回复
主要是我不知道怎么给弄出来。
能给个代码就好了。 一个是.aspx的,一个是.aspx.cs的
Erice 2008-01-13
  • 打赏
  • 举报
回复
sql server 2005 和sql2000一样
kivetja 2008-01-13
  • 打赏
  • 举报
回复
非常感谢楼上的,用的是MSSQL2005
Erice 2008-01-13
  • 打赏
  • 举报
回复
1。还多朋友会推荐你使用存储过程,这个只要你会写,固然很好。但是 对以后的程序迁移等会造成影响

2。自己拼装SQL ,在主表插入成功后(同一个Connection中),如果是 SQL server 就用select SCOPE_IDENTITY(),MySQL用Select LAST_INSERT_ID() ,Sybase 用 Select @@Identity 等 返回 该表中,插入语句影响的字增字段的当前值。 获取到这个值,然后将它写入detail表中。

3. 如果只是练手的话,建议使用ORM的,因为,ORM会让你省去很多调试SQL拼装的时间。

以上信息只供参考。
he_8134 2008-01-13
  • 打赏
  • 举报
回复
数据库菜鸟路过。。。2个表 最好用上“事务”。。。
kivetja 2008-01-13
  • 打赏
  • 举报
回复
楼上详细点好吗? 我对.net 一点都不懂。
catvv 2008-01-13
  • 打赏
  • 举报
回复
存储过程
kivetja 2008-01-13
  • 打赏
  • 举报
回复
原来是这样,我还以为一定要用GridView,DatailsView,FormView什么的东东,晕死
fang1572 2008-01-13
  • 打赏
  • 举报
回复
前台没什么代码了啊,你只要往前台拖一个BUTTON控件,然后双击他,就进入后台了,在后台里写上上面的代码就行了
kivetja 2008-01-13
  • 打赏
  • 举报
回复
谁有前台的代码
atpains 2008-01-13
  • 打赏
  • 举报
回复
直接用个Button 提交就可以了哦

存储过程。

if exists (select name from sysobjects
where name = 'pr存储过程名称' and type = 'p')
drop procedure pr存储过程名称
go

CREATE PROCEDURE pr存储过程名称
@Cname nvarchar(50), --产品类名称
@Cx1 nvarchar(50), --产品类说明
@Pname nvarchar(50), --产品名称
@Px1 nvarchar(50), --产品名称
@intPID int output, --返回产品表自动编号
@intCID int output --返回产品类表自动编号
AS
SET NOCOUNT ON

Declare @intErrorCode int

Select @intErrorCode = @@Error

If @intErrorCode = 0
Begin Transaction

If @intErrorCode = 0
Begin
insert into 表B
(Cname,Cx1)
VALUES
(@Cname,@Cx1)

Select @intCID = @@identity

insert into 表A
(Pname,PclassID,Px1)
VALUES
(@Pname,@intCID,@Px1)

Select @intPID = @@identity

Select @intErrorCode = @@Error

End

If @intErrorCode = 0 and @@trancount > 0
Commit Transaction
Else
Rollback Transaction

Return @intErrorCode

Go

62,051

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧