2014-11-24 57 views
0

我有一個允許電子簽名的web應用程序。當我得到簽名時,它的確切大小(大部分大於8000字節)。但是當它進入數據庫時​​,它總是被截斷爲8000字節。 當我檢查varbinary時,它說'隱式轉換失敗,如果字節數組大於8,000字節。在處理大於8,000字節的字節數組時,顯式設置對象。' 在以下情況下我該怎麼做?我不想丟失任何字節。如何在varbinary中存儲16000字節

public DataSet InsertInformation(FormInformation info) 
{ 
    SqlCommand command = new SqlCommand("SPInsertSig"); 
    command.Parameters.Add("@Signature", SqlDbType.VarBinary).Value = info.Signature; 
    DataSet resultDataSet; 
    resultDataSet = ExecuteStoreProcedure(command); 
    return resultDataSet; 
} 

當我GOOGLE時,有人提到嘗試這種方式,但它也不工作,並截斷值爲8000字節。

SqlParameter param = command.Parameters.Add("@Signature", SqlDbType.VarBinary); 
param.Value = info.Signature; 
param.Size = -1; 

任何建議將非常感激。 感謝

更新 將其更改爲Int32.MaxValue後,它的工作。

+3

使用數據類型VARBINARY(MAX),還具有一看這個['Question'](http://stackoverflow.com/questions/5824620/what-sqldbtype-maps-to-varbinarymax) – 2014-11-24 21:56:23

+0

我的數據類型已經是varbinary(max),我相信上面粘貼的代碼會以某種方式截斷大小。 – user2908229 2014-11-24 22:11:13

+0

什麼是info.Signature的.NET數據類型?我期望第二個代碼片段(大小-1)與一個字節數組一起工作。 – 2014-11-25 01:07:56

回答

2

嘗試使用新的SqlParemeter c'tor:

SqlParameter(String, SqlDbType, Int32) 

或在您的情況:

command.Parameters.Add(new SqlParameter("@Signature", SqlDbType.VarBinary, -1)).Value = info.Signature; 
+0

yackov mandes zaig我試過,它仍然截斷和存儲只有8000當我查詢數據長度。 – user2908229 2014-11-24 22:18:16

+0

如何將-1更改爲Int32.MaxValue? – ymz 2014-11-24 22:22:09

+0

@ user2908229你如何測量數據長度? – 2014-11-25 13:52:14

1

沒有人能明確給你的答案到底是什麼,因爲缺乏問題的深度,所以你真的需要按照清單來確定問題。這是你應該檢查我的意見的順序;最常見的原因是我的經驗最不常見。由於你所看到的信息,我敢打賭#4是罪魁禍首。

  1. 表中的字段是否被聲明爲varbinary(max)
  2. 代碼中的SQL參數大小是否正確(即.size=-1)?
  3. 被調用的存儲過程是否在參數聲明中正確調整了字段大小?
  4. 是否有CASTCONVERT調用指定VARBINARY,但不是存儲過程中正確的大小?
  5. 在表上是否有觸發器將數據備份到另一個表中?如果是這樣,那張桌子的尺寸是否正確?另外,如果有觸發器,是否有CASTCONVERT調用指定VARBINARY,但在存儲過程中沒有正確的大小?
  6. 存儲過程中是否存在將原始值複製到另一個變量中並且該變量大小不正確的地方?
  7. 是否有一個視圖可能被錯誤地聲明的字段索引?
相關問題