把DataTable中的数据插入到数据表的问题,急!~~~~~~~~~~~~~~~~

fish_yht 2006-07-07 03:50:53
现在有如下DataTable数据
name orderid productid quantity unitprice
小虎 10 3 10 10.20
小虎 10 5 30 20.00

现在要把这个Data中的数据插入到2个表中,一个orders表,另一个orderitems表
插入结果及表结构如下
orders
myid name orderid
1 小虎 10


orderitems
myid productid quantity unitprice
1 3 10 10.20
1 5 30 20.00


该怎么对DataTable进行操作,又没有哪位大哥能提供代码我啊,先谢过了
...全文
207 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fish_yht 2006-07-07
  • 打赏
  • 举报
回复
存储过程如下:



Alter PROC upInsertOutStore
@xml varchar(8000)
AS

DECLARE @idoc int
DECLARE @Outid int
DECLARE @OutDate datetime
SET @OutDate = getdate()

EXEC sp_xml_preparedocument @idoc output, @xml


SET NOCOUNT ON
DECLARE @CurrentError int

BEGIN TRANSACTION

INSERT INTO OutStore
SELECT @OutDate,OrderID,Customer,DeliverMethod,ShipAddress,Deliverman,Status
FROM OpenXML(@idoc,'/OutStore')
WITH OutStore

SELECT @CurrentError = @@ERROR

IF @CurrentError != 0
BEGIN
GOTO ERROR_HANDLER
END

SELECT @Outid = @@IDENTITY

INSERT INTO OutStoreItems
SELECT ItemID,PrductID,UnitPrice,Quantity,@Outid
FROM OpenXML(@idoc,'/OutStore/OutStoreItems')
WITH OutStoreItems

SELECT @CurrentError = @@ERROR

IF @CurrentError != 0
BEGIN
GOTO ERROR_HANDLER
END

UPDATE Inventory
SET Inventory.qty = Inventory.qty - OutStoreItems.Quantity
FROM OpenXML(@idoc,'/OutStore/OutStoreItems')
WITH OutStoreItems
WHERE Inventory.itemid = OutStoreItems.ItemID

select @CurrentError = @@Error

IF @CurrentError != 0
BEGIN
GOTO ERROR_HANDLER
END


COMMIT TRANSACTION

SET NOCOUNT OFF


EXEC sp_xml_removedocument @idoc

RETURN @Outid

ERROR_HANDLER:
ROLLBACK TRANSACTION
SET NOCOUNT OFF
RETURN 0
GO

错误为:

服务器: 消息 446,级别 16,状态 9,过程 upInsertOutStore,行 44
无法解决 equal to 操作的排序规则冲突。

我不明白为什么会出现这种问题
hy98521 2006-07-07
  • 打赏
  • 举报
回复
insert into tablename(
id,
name
)
values(
@id,
@name
) --id 为自增长类型。 去掉就好了。
pclion 2006-07-07
  • 打赏
  • 举报
回复
只用DataTable.Update()就够了
zhgroup 2006-07-07
  • 打赏
  • 举报
回复
存储过程和代码没什么区别,只是存储过程需要参数.如:
存储过程
create procedure sp_Insert(
@id bigint,
@name varchar(64)
)
AS
insert into tablename(
id,
name
)
values(
@id,
@name
)
return 0

调用:
SqlCommand dbCmd = new SqlCommand();
dbCmd.CommandType = CommandType.StoreProcedure;
dbCmd.CommandText = "sp_Insert";
dbCmd.Parameters.Clear();
dbCmd.Parameters.Add( new SqlParameter("@id",SqlDbType.BigInt,8,"ID" ) );
dbCmd.Parameters.Add( new SqlParameter("@name",SqlDbType.VarChar,64,"name" ) );
dbCmd.ExecuteNonQuery();
IMHELLFIRE 2006-07-07
  • 打赏
  • 举报
回复
估计是存储过程没写对。
fish_yht 2006-07-07
  • 打赏
  • 举报
回复
我已经用了最笨的方法搞了一小下,估计代码没有问题了,现在的问题是我的存储过程搞不定
他说

服务器: 消息 446,级别 16,状态 9,过程 upInsertOutStore,行 44
无法解决 equal to 操作的排序规则冲突。

我都要与闷死了
在其它没有这个表的数据库执行创建存储过程没有问题,在我要用的数据库执行存储过程就有问题
疯掉
rola 2006-07-07
  • 打赏
  • 举报
回复
关注,除了自己写代码处理外,我想不出好办法

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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