See you there.
Alessandro
I think you should consider using a SqlTransaction.
Probably something like this is more robust :
public static void InsertFile(string applicationName, Stream data,
string mimeType, string fileName)
{
SqlTransaction transaction = null;
try
using (SqlConnection myConnection = GetSqlConnection())
myConnection.Open();
transaction = myConnection.BeginTransaction();
using (SqlCommand cmd = new SqlCommand("DbOwner" + ".DataFile_Insert", myConnection, transaction))
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@applicationName", SqlDbType.NVarChar, 256).Value = applicationName;
cmd.Parameters.Add("@mimeType", SqlDbType.NVarChar, 50).Value = mimeType;
cmd.Parameters.Add("@length", SqlDbType.Int, 4).Value = data.Length;
cmd.Parameters.Add("@fileName", SqlDbType.NVarChar, 256).Value = fileName;
SqlParameter fileIdParam = cmd.Parameters.Add("@fileId", SqlDbType.Int, 4);
fileIdParam.Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
var fileId = (int)fileIdParam.Value;
InsertFileByChunks(cmd, fileId, data, 128);
}
transaction.Commit();
catch (SqlException sqlException)
if (transaction != null)
transaction.Rollback();
// ... Log the exception
finally
transaction.Dispose();
private static void InsertFileByChunks(SqlCommand cmd, int fileId, Stream data, int bufferLen)
cmd.CommandText = "DbOwner" + ".DataFile_InsertChunk";
cmd.Parameters.Add("@fileId", SqlDbType.Int, 4).Value = fileId;
SqlParameter paramData = cmd.Parameters.Add("@data", SqlDbType.VarBinary, 128);
SqlParameter paramOffset = cmd.Parameters.Add("@offset", SqlDbType.BigInt);
cmd.Parameters.Add("@length", SqlDbType.Int, 4).Value = bufferLen;
using (BinaryReader br = new BinaryReader(data))
byte[] buffer = br.ReadBytes(bufferLen);
int offset = 0;
while (buffer.Length > 0)
paramData.Value = buffer;
paramOffset.Value = offset;
offset += bufferLen;
buffer = br.ReadBytes(bufferLen);
Petar! That totally slipped my mind. I know i was considering it at some point, just weren't there yet :-)
Many thanks
You've been kicked (a good thing) - Trackback from DotNetKicks.com
Two thumbs up!!!