2014-01-23 78 views
0

我需要從代碼運行存儲過程。其中一個輸入參數是表格的rowVersion。 rowVersion是一個字節數組({0,0,0,0,0,0,13,131},即db中的0x0000000000000DBF)。因此,如果以這種方式添加rowVersion:在C中將字節數組轉換爲十六進制#

cmd.Parameters.AddWithValue("@myPKRowversion", 0x0000000000000DBF); 

我的sp正在工作。但是,當我將它添加喜歡這裏:

uint a = 0x0000000000000DBF; 
cmd.Parameters.AddWithValue("@myPKRowversion", a); 

,或者如果我轉換字節數組字符串,如:

string a = "0x0000000000000DBF"; 
cmd.Parameters.AddWithValue("@myPKRowversion", a); 

我的SP是行不通的。 我應該怎樣做才能使我的工作?

+2

注意'uint'僅代表4個字節,而不是8 –

+1

無法真的測試了這一點,但0x0000000000000DBF被IDE檢測爲Int32,而不是UInt32。所以你的工作示例和你的第一個非工作示例是不一樣的。如果使用int而不是uint,它會起作用嗎? – Tim

+0

@ Jon解決方案,JonSkeet建議在我的代碼中正常工作。但無論如何,你也是對的。當我將uint更改爲Int32時,我的sp也不會給我錯誤! – Sasha

回答

3

我建議你將它作爲字節數組加上。例如:

byte[] bytes = new byte[] { 0, 0, 0, 0, 0, 0, 13, 191 }; 
cmd.Parameters.Add("@myPKRowVersion", SqlDbType.Binary).Value = bytes; 

如果你想指定字節,最自然的類型是一個字節數組...

+0

Thnx,它的工作。 – Sasha

相關問題