哪应该怎么办呀!怎么设计?还有,在C#做web程序的时候,有没有Delphi中启用本地缓存的概念,在C#是怎么实现的呀?
解决方案 »
- C#如何调用fortran编译器ivf生成的DLL
- c# winform 如何禁止最大化和最小化?
- 自已设计接口并实现之(不能用系统函数)
- 求正则表达式
- Form 中有个按钮,点击按钮会在 Form 上增加一个 pictureBox 。如何能够拖拽这个新增加的 pictureBox
- 谁能解答一下这种列表怎么实现的???
- HtmlAgilityPack Xpath 问题
- 在设计器中,如何为自定义控件的某个属性动态生成值列表?
- 高分求助:如何把access表中某个字段的值取出并赋给一个变量?
- 帮忙看下,连接数据库问题,连接总是不成功。
- 我现在想搞个象Windows自带的绘图工具,不知道应该用哪些控件,名字叫什么?请帮帮忙!谢谢,200分,另开贴给分!(给分帖)
- 找C#的像windows画图程序的代码、控件!!![菜鸟提问]
下面就是产生一笔定单的存储过程,大家注意SET XACT_ABORT ON ,这就是事务处理。
ALTER PROCEDURE InsertOrderDetailsByList
@OrderId INT,
@ItemIdList NVARCHAR(4000) = NULL,
@QuantityList NVARCHAR(4000) = NULL,
@PriceList NVARCHAR(4000) = NULL
AS
SET NOCOUNT ON DECLARE @Length INT
DECLARE @FirstItemIdWord NVARCHAR(4000)
DECLARE @FirstQuantityWord NVARCHAR(4000)
DECLARE @FirstPriceWord NVARCHAR(4000)
DECLARE @ItemId INT
DECLARE @Quantity INT
DECLARE @Price MONEY
SELECT @Length = DATALENGTH(@ItemIdList) WHILE @Length > 0
BEGIN
EXECUTE @Length = PopFirstWord @ItemIdList OUTPUT, @FirstItemIdWord OUTPUT
EXECUTE PopFirstWord @QuantityList OUTPUT, @FirstQuantityWord OUTPUT
EXECUTE PopFirstWord @PriceList OUTPUT, @FirstPriceWord OUTPUT IF @Length > 0
BEGIN
SELECT @ItemId = CONVERT(INT, @FirstItemIdWord)
SELECT @Quantity = CONVERT(INT, @FirstQuantityWord)
SELECT @Price = CONVERT(MONEY, @FirstPriceWord) EXECUTE InsertOrderDetail @OrderId, @ItemId, @Price, @Quantity
END
END
ALTER PROCEDURE InsertOrderDetailsByList
@OrderId INT,
@ItemIdList NVARCHAR(4000) = NULL,
@QuantityList NVARCHAR(4000) = NULL,
@PriceList NVARCHAR(4000) = NULL
AS
SET NOCOUNT ON DECLARE @Length INT
DECLARE @FirstItemIdWord NVARCHAR(4000)
DECLARE @FirstQuantityWord NVARCHAR(4000)
DECLARE @FirstPriceWord NVARCHAR(4000)
DECLARE @ItemId INT
DECLARE @Quantity INT
DECLARE @Price MONEY
SELECT @Length = DATALENGTH(@ItemIdList) WHILE @Length > 0
BEGIN
EXECUTE @Length = PopFirstWord @ItemIdList OUTPUT, @FirstItemIdWord OUTPUT
EXECUTE PopFirstWord @QuantityList OUTPUT, @FirstQuantityWord OUTPUT
EXECUTE PopFirstWord @PriceList OUTPUT, @FirstPriceWord OUTPUT IF @Length > 0
BEGIN
SELECT @ItemId = CONVERT(INT, @FirstItemIdWord)
SELECT @Quantity = CONVERT(INT, @FirstQuantityWord)
SELECT @Price = CONVERT(MONEY, @FirstPriceWord) EXECUTE InsertOrderDetail @OrderId, @ItemId, @Price, @Quantity
END
END
就是调用下面的。
ALTER PROCEDURE InsertOrderDetail
@OrderId INT = NULL,
@ItemId INT = NULL,
@UnitPrice MONEY = NULL,
@Quantity INT = NULL
AS
SET NOCOUNT ON -- INSERT OrderItems INFORMATION
INSERT OrderItems (OrderId,
ItemId,
UnitPrice,
Quantity) SELECT @OrderId,
@ItemId,
@UnitPrice,
@Quantity RETURN 0另外 PopFirstWord 就是将用‘,’连接的子表数据分割开,然后一条一条执行Execute InsertOrderDetail
//分割函数
LTER PROCEDURE PopFirstWord
@SourceString NVARCHAR(4000) = NULL OUTPUT,
@FirstWord NVARCHAR(4000) = NULL OUTPUT
AS
SET NOCOUNT ON DECLARE @Oldword NVARCHAR(4000)
DECLARE @Length INT
DECLARE @CommaLocation INT SELECT @Oldword = @SourceString IF NOT @Oldword IS NULL
BEGIN
SELECT @CommaLocation = CHARINDEX(',',@Oldword)
SELECT @Length = DATALENGTH(@Oldword) IF @CommaLocation = 0
BEGIN
SELECT @FirstWord = @Oldword
SELECT @SourceString = NULL RETURN @Length
END SELECT @FirstWord = SUBSTRING(@Oldword, 1, @CommaLocation -1)
SELECT @SourceString = SUBSTRING(@Oldword, @CommaLocation + 1, @Length - @CommaLocation) RETURN @Length - @CommaLocation
END RETURN 0
然后再Update(OrderData,OrderData.Tables[从表]);
在想SqlDataAdapter.UpdateCommand 传参数的时候直接写个存储过程就行了,然后把数据利用分割符传入就OK。