2013-02-03 4 views
0

Petapoco를 사용하여 몇 가지 datetime 필드를 업데이트하려고했지만 SQL 프로필러를 찾아 다음 실행 문을 찾을 수 있도록 업데이트가 항상 실패합니다. Petapoco datetime 오류

exec sp_executesql N'UPDATE [db_Product] SET [aName] = @0, [aDesc] = @1, [EmpID] = @2, [UPCCode] = @3, [isActive] = @4, [isExpendable] = @5, [ProductCatID] = @6, [ProductSubCatID] = @7, [PromoCatID] = @8, 
    [Property1Name] = @9, [Property2Name] = @10, [RackPrice] = @11, [DiscountMethod] = @12, [DiscountAmount] = @13, [SellingPrice] = @14, [Cost] = @15, [CurrencyType] = @16, [qtyPerSaleMin] = @17, 
    [qtyPerSaleMax] = @18, [SupplierID] = @19, [BrandID] = @20, [StartDate] = @21, [EndDate] = @22, [MadeIn] = @23, [TakeStockName] = @24, [LifeCycleName] = @25, [ReOrderQty] = @26, [ReOrderPoint] = @27, 
    [ReOrderDays] = @28, [PreOrderDays] = @29, [aMemo] = @30, [Updator] = @31, [DateUpdate] = @32 WHERE [ProductID] = @33',N'@0 nvarchar(4000),@1 nvarchar(4000),@2 int,@3 nvarchar(4000),@4 int,@5 int,@6 int,@7 
    int,@8 int,@9 nvarchar(4000),@10 nvarchar(4000),@11 decimal(4,4),@12 nvarchar(4000),@13 decimal(4,4),@14 decimal(4,4),@15 decimal(4,4),@16 nvarchar(4000),@17 int,@18 int,@19 int,@20 int,@21 datetime,@22 
    datetime,@23 nvarchar(4000),@24 nvarchar(4000),@25 nvarchar(4000),@26 int,@27 int,@28 int,@29 int,@30 nvarchar(4000),@31 int,@32 datetime,@33 
    int',@0=N'testxxx',@1=N'',@2=0,@3=N'',@4=0,@5=0,@6=1,@7=0,@8=0,@9=N'Color',@10=N'Size',@11=0,@12=N'%',@13=0,@14=0,@15=0,@16=N'TWD',@17=0,@18=0,@19=0,@20=0, 

@21=''2013-01-20 12:28:00:000'',@22=''2063-01-20 12:28:00:000'', <--problem 

@23=N'TW ',@24=N'週盤',@25=N'新品',@26=1,@27=1,@28=3,@29=1,@30=N'',@31=0, 

@32=''2013-02-04 02:45:47:640'' <----problem 

,@33=1 

어떤 이유로, 모든 날짜 필드는 '을 이 때문에 업데이트에 오류가 발생합니다.

편집 : C# 코드, BAL

public int Update(int _id, ProductManager _M) 
{ 
    int result = _M.Product.UpdateByID(_id, _M.Product); 

    return result; 

} 

C# 코드, DAL

public virtual int UpdateByID(int _id, db_Product data) 
{ 
    data.DateUpdate = DateTime.Now; 
    using (var db = new ConnClass().ConnDB()) 
    { 
     var result = db.Update(data, _id); 
     return result; 
    } 
} 

BAL _M.Product.UpdateByID (_id, _M.Product); 업데이트 용 DAL 코드로 업데이트를 보냅니다. 내 ProductManager _M의 값을 확인하면 dateTime 값이 유효합니다.

Petapoco 명령 실행은

UPDATE [db_Product] SET [aName] = @0, [aDesc] = @1, [EmpID] = @2, [UPCCode] = @3, [isActive] = @4, [isExpendable] = @5, [ProductCatID] = @6, [ProductSubCatID] = @7, 
[PromoCatID] = @8, [Property1Name] = @9, [Property2Name] = @10, [RackPrice] = @11, [DiscountMethod] = @12, [DiscountAmount] = @13, [SellingPrice] = @14, [Cost] = @15, [CurrencyType] = @16, [qtyPerSaleMin] = @17, [qtyPerSaleMax] = @18, [SupplierID] = @19, [BrandID] = @20, 
[StartDate] = @21, [EndDate] = @22, [MadeIn] = @23, [TakeStockName] = @24, [LifeCycleName] = @25, [ReOrderQty] = @26, [ReOrderPoint] = @27, [ReOrderDays] = @28, [PreOrderDays] = @29, 
[aMemo] = @30, [Updator] = @31, [DateUpdate] = @32 WHERE [ProductID] = @33 

나는 이미이 재미 결과 ....

+0

코드는 어떻게 생겼을까? – David

+0

모델 정의 란 무엇입니까? – Schotime

+0

결국 나는 오류를 해결합니다. 실제로 오류가 없으므로 실제로 데이터가 데이터베이스에 기록됩니다. 그러나 PetaPoco는 성공적인 업데이트인지 여부에 관계없이 -1로 업데이트 int를 반환했습니다. 그것은 버그 또는 뭔가 것 같다. –

답변

1

Petapoco이 ADO.net ExecuteNonQuery()를 사용하여 UPDATE 문을 실행 디버깅 며칠 보냈다에 의해 반환되는 값을 반환 이 함수.

이 함수의 문서 상태 : UPDATE, INSERT를 들어

, DELETE 문, 반환 값은 명령에 의해 영향을받는 행의 수입니다. 테이블에 삽입 또는 업데이트되는 트리거가있는 경우 반환 값에는 삽입 또는 업데이트 작업의 영향을받는 행 수 과 트리거 또는 트리거에 의해 영향을받는 행 수 이 반환됩니다. 다른 모든 유형의 문에 대한 반환 값은 -1입니다. 롤백이 발생하면 값은 -1로 반환됩니다.

출처 : MSDN

+0

그렇다면 단일 행 업데이트와 롤백 모두에서 -1을 반환하기 때문에 UPDATE가 성공했는지 여부를 알 수 없습니까? 혼란스럽지 않니? –