在 .NET 專案中使用 MAction 框架向 MySQL Blob 欄位寫入圖片二進位資料時,拋出「索引超出了陣列界限」例外。同樣程式碼對 SQL Server、Oracle 等資料庫卻正常運作。
DbParameter.Size 賦值時,寫入成功。DbType.Binary 時,設定 Size 會觸發此 Bug。框架通用參數建立邏輯如下:
DbParameter para = factory.CreateParameter();
para.ParameterName = name;
para.Value = value ?? DBNull.Value;
para.DbType = dbType;
if (size > -1) para.Size = size; // ← 這行導致 MySQL Blob 寫入失敗
para.Direction = direction;
MySQL 驅動在處理 DbType.Binary 參數的 Size 屬性時存在缺陷,導致內部陣列越界。
在設定 Size 前排除二進位類型:
if (dbType != DbType.Binary && size > -1)
{
para.Size = size;
}
經測試,SQL Server、Oracle、PostgreSQL 等均不受影響,僅 MySQL 需特殊處理。
Size、Precision、Scale 等屬性的相容性。此修正已應用於生產環境,穩定運行超過兩年,未再出現同類異常。