У меня есть байтовый массив, который всегда будет 10 мегабайт.Независимо от того, какие данные в нем, это будет десять мегабайт.Цель связана с кучей больших объектов ( дополнительная информация ).
Так что, если файл 1Mb помещен в байт [], то последние девять мег будут обнулены,Проблема в том, что когда я загружаю это на SQL Server, загруженный файл всегда составляет 10 мегабайт.Я бы предпочел загрузить только необходимые биты.
У меня есть размер, прежде чем он будет скопирован в байтовый массив, так что я мог бы сделать обрезку, если потребуется.Проблема в том, что я не знаю, как эффективно сделать такой, который не создает новый байт [] в LOH.
Идеи?
Обновлено # 1
Вот какой-то псевдокод.Я удалил большую часть ненужного кода.Для доступа к базе данных используется библиотека Microsoft.Practices.EnterpriseLibrary.Data.(Устаревший код не может быть изменен)
Param[] parametersArray = new Param[10];
// other params
parametersArray[4] = new Param("DocumentData", DbType.Binary, documentToSave.Data);
// other params
DataAccess.ExecuteNonQuery("esMD.proc_WS_UpdateDocument", parametersArray);
public static int ExecuteNonQuery(string spName, params Param[] parameters)
{
int ret = -1;
DbCommand storedProcedure = Database.Db.GetStoredProcCommand(spName);
storedProcedure.CommandTimeout = commandTimeout;
if (parameters != null)
{
foreach (Param parameter in parameters)
{
if (parameter != null)
{
Database.Db.AddInParameter(storedProcedure, parameter.ParameterName, parameter.DbType, parameter.Value);
}
}
}
try
{
ret = MedicareDatabase.Db.ExecuteNonQuery(storedProcedure);
}
catch (Exception)
{
throw;
}
finally
{
if (storedProcedure != null)
{
storedProcedure.Dispose();
}
}
return ret;
}
Обновлено # 2
Я изменил вызов базы данных выше, а также изменил способ ввода параметров.
if (parameter.Size != null && parameter.Size > 0)
{
MedicareDatabase.Db.AddParameter(storedProcedure, parameter.ParameterName, DbType.Binary, parameter.Size, ParameterDirection.Input, true, 0, 0, string.Empty, DataRowVersion.Default, parameter.Value);
}
else
{
MedicareDatabase.Db.AddInParameter(storedProcedure, parameter.ParameterName, parameter.DbType, parameter.Value);
}
Кажется, это работает для меня.Кто-нибудь видит какие-либо проблемы с этим?
-Chad