2012-04-17 13 views
1

使用this技術,我將大量的記錄集合作爲XML傳遞給.NET 4.0應用程序中的SQL Server(2008R2)proc。 proc準備XML,並使用OPENXML加入它(或者至少當我得到它時)。從.NET應用程序調用SQL參數時,爲什麼會變爲NULL?

當代碼執行時,.NET似乎正確地構建了參數並將其添加到SQL命令,但是當它調用SQL Server時,SQL Profiler將參數顯示爲空。

exec jcsdmp_UpdateMultiDocumentSendStatus @pUpdateStatusesXML=NULL 

調用代碼:

SqlParameter[] UpdateParams = new SqlParameter[1]; 
UpdateParams[0] = new SqlParameter("@pUpdateStatusesXML", SqlDbType.NText, sb.ToString().Length, sb.ToString()); 

SqlAccess.ExecuteNonQuery("docmgmt", "jcsdmp_UpdateMultiDocumentSendStatus", CommandType.StoredProcedure, UpdateParams); 

是的,我一直在尋找到自定義SqlAccess類(這在很大程度上檢查參數,打開連接,等等 - 沒有真正的魔法),但到目前爲止,它看起來像.NET認爲它發送的參數...

是否有一個大小限制我可能會失蹤或沿着這些線?

回答

2

對於您使用的SqlParameter構造函數overload,第四個參數不是值,而是source column

您是否嘗試過使用constructor overload that accepts the value,它會推斷出類型和大小?

UpdateParams[0] = new SqlParameter("@pUpdateStatusesXML", sb.ToString()); 

您可以明確地設置在此之後,SqlDbType如果需要(它可以推斷的NVarChar):

UpdateParams[0].SqlDbType = SqlDbType.NText; 
+0

我見過造成不正確的指定類型和尺寸的許多錯誤。我從來沒有看到推斷他們輸入參數引起的錯誤。 – 2012-04-17 23:17:16

+0

@David Ruttka - Uggh。無法通過樹木看到森林。謝謝。 – 2012-04-23 18:40:17

相關問題