Я впервые пытаюсь использовать файловый поток для хранения файлов pdf в файловой системе, используя тип столбца varbinary (MAX).
Я выполнил следующие шаги.
- включенная функция файлового потока на SQL Server 2008 R2.
- Создание файловой группы для хранения BLOB
- созданная таблица со столбцом BLOB типа varbinary (max)
Теперь я хочу использовать элемент управления загрузкой файлов, чтобы выбрать файл, и при нажатии на кнопку загрузки он должен сохранить файл PDF. Кроме того, как получить файл?
Я пробовал следующий код
protected void btnFSupload_Click(object sender, EventArgs e)
{
SqlConnection cn = null;
SqlTransaction tx = null;
SqlCommand cmd = null;
SqlCommand cmd2 = null;
bool bCommit = false;
try
{
// read in the file to be saved as a blob in the database
FileStream input = new FileStream(@"D:\swami.pdf", FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[(int)input.Length];
input.Read(buffer, 0, buffer.Length);
cn = new SqlConnection("server=at-hetal01\\sqlexpress;Initial Catalog=practice;Integrated Security=true;");
cn.Open();
tx = cn.BeginTransaction();
cmd = new SqlCommand("dbo.stp_AddBLOB", cn, tx);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataReader r = cmd.ExecuteReader(System.Data.CommandBehavior.SingleRow);
r.Read();
string id = r[0].ToString();
string path = r[1].ToString();
r.Close();
// get the transaction context
cmd2 = new SqlCommand("SELECT GET_FILESTREAM_TRANSACTION_CONTEXT()", cn, tx);
Object obj = cmd2.ExecuteScalar();
byte[] txCtx = (byte[])obj;
// open the filestream to the blob
SafeFileHandle handle = OpenSqlFilestream(path,DESIRED_ACCESS_WRITE,SQL_FILESTREAM_OPEN_NO_FLAGS,txCtx,(UInt32)txCtx.Length,0);
// open a Filestream to write the blob
FileStream output = new FileStream(handle,FileAccess.Write,buffer.Length,false);
output.Write(buffer,0,buffer.Length);
output.Close();
if (handle != null && !handle.IsClosed)
handle.Close();
bCommit = true;
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
if (cn != null)
{
switch (bCommit)
{
case true:
tx.Commit();
break;
case false:
tx.Rollback();
break;
}
cn.Close();
}
}
}
Код выше показывает ошибку, как показано ниже
Операционная система возвратила ошибку «0xc000003a ({Путь не найден}. Путь% hs не существует.)» При попытке «NtCreateFile» для «D: \ DB \ FS \ d11132f8-c2a8-452d-ae0c-208164a550d7 \ beb8e1f1-8116-440b-870B-7cef4281a15d \ 0000001c-000000e4-010d. Заявление было прекращено.
Итак, есть какие-нибудь подсказки по этому поводу?