Jac*_*ack 4 .net c# sql-server sql-server-2008
我有一个帐户创建过程,基本上当用户注册时,我必须在多个表格中输入用户,个人资料,地址.User表中有1个条目,Profile中有1个条目,Address表中有2-3个条目.所以,最多会有5个条目.我的问题是我应该将这个XML传递给我的存储过程并在那里解析它,还是应该在我的C#代码中创建一个事务对象,保持连接打开并逐个插入地址?
你如何处理这种情况?即使连接打开,是否可以进行多次调用会降低性能?
没有冒犯,但你在想这个.
收集您的信息,当您将它们放在一起时,创建一个事务并一次插入一个新行.这里没有任何表现,因为交易将是短暂的.
问题是如果你在连接上创建事务,插入用户行,然后等待用户输入更多的配置文件信息,插入,然后等待它们添加地址信息,然后插入,不要这样做,这是一个不必要的长时间运行的事务,并将产生问题.
但是,您的方案(您拥有所有数据)是正确使用事务,它可以确保您的数据完整性,并且不会对您的数据库造成任何压力,也不会 - 在它自己 - 上创建死锁.
希望这可以帮助.
PS Xml方法的缺点是增加了复杂性,您的代码需要知道xml的模式,您的存储过程也需要知道Xml模式.存储过程增加了解析xml,然后插入行的复杂性.我真的没有看到简单的短期运行事务的额外复杂性的优势.
如果要在多个表中插入记录,则使用XML参数是一种复杂的方法.在.net服务器中,在.net中创建Xml并从xml中为三个不同的表提取记录是很复杂的.
在事务中执行查询是一种简单的方法,但是在.net代码和sql server之间切换会降低某些性能.
最好的方法是在storedprocedure中使用table参数.在.net代码中创建三个数据表,并在存储过程中传递它们.
- 为每种类型的表创建类型TargetUDT1,TargetUDT2和TargetUDT3,其中包含需要插入的所有字段
CREATE TYPE [TargetUDT1] AS TABLE
(
[FirstName] [varchar](100)NOT NULL,
[LastName] [varchar](100)NOT NULL,
[Email] [varchar](200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
- 现在按照以下方式写下sp.
CREATE PROCEDURE AddToTarget(
@TargetUDT1 TargetUDT1 READONLY,
@TargetUDT2 TargetUDT2 READONLY,
@TargetUDT3 TargetUDT3 READONLY)
AS
BEGIN
INSERT INTO [Target1]
SELECT * FROM @TargetUDT1
INSERT INTO [Target2]
SELECT * FROM @TargetUDT2
INSERT INTO [Target3]
SELECT * FROM @TargetUDT3
END
Run Code Online (Sandbox Code Playgroud)
在.Net中,创建三个数据表并填充该值,并正常调用sp.
| 归档时间: |
|
| 查看次数: |
2379 次 |
| 最近记录: |