Необходимость, которая у меня есть, состоит в том, чтобы знать, существует ли какая-то возможность присоединять файлы PDF или любой тип файла в реестр BD в SQL Server 2008 R2 с приложения C#, сделанного с VS 2012.
В действительности не важно ей versiГіn из IDE, который ты используешь, с C # ты можешь делать много вещей, и между ними ты можешь предпочитать последовательно преобразовывать файл (PDF или любой другой) в цепь Base64 и сохранять ее как будто это был string:
using System;
using System.IO;
public class Serializador
{
public static bool GuardarArchivo(string archivo)
{
// Leemos todos los bytes del archivo y luego lo guardamos como Base64 en un string.
string resultado = Convert.ToBase64String(File.ReadAllBytes(archivo));
using (var cn =
new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString))
{
using(var cmd = cn.CreateCommand())
{
// Se invoca a un StoreProcedure para insertar el registro.
cmd.CommandText = "usp_InsertArchivo";
cmd.CommandType = CommandType.StoreProcedure;
// Con la ayuda de FileInfo devolvemos unicamente el nombre del archivo.
cmd.Parameters.AddWithValue("@nombreArchivo", new FileInfo(archivo).Name);
// El resultado serializado del archivo pasa como un varchar cualquiera.
cmd.Parameters.AddWithValue("@contenido", resultado);
cn.Open();
int cantidad = cmd.ExecuteNonQuery();
// Si es mayor a 0 entonces se guardo correctamente.
return (cantidad > 0);
}
}
}
}
Да, возможно. У тебя есть три альтернативы:
Хранить файл прямо в базе данных как тип Blob
и хранить бинарного прямо.
Хранить файл прямо в базе данных с типом FileStream
.
Хранить файл к диску и сохранять маршрут файла в поле твоей таблицы в базе данных.
У каждой альтернативы есть Ваш pros и contras после нескольких дискуссий по этому поводу. Более рекомендуемая, что я увидел для SQL Server (по крайней мере на изображениях, но он применяется к любому типу файла), это вторая. В случае, что ты не использовал SQL Server, второй выбор остается отказавшимся и он рекомендовал бы тебе третью, потому что он облегчает содержание файлов, база данных не является такой тяжелой, существует расставание тем, облегчает доказательства, и т.д.
Здесь больше информации по этому поводу: https://stackoverflow.com / q / 3748/1065197
Если возможно, хотя он не является рекомендуемым
Ты можешь объявлять твою колонну как VARBINARY
в Sql
И код, чтобы пересылать файл, был бы больше или meno был бы нечто похожим:
byte[] byteArray = cargarArchivo(); //Regresa tu archivo como un arreglo de bytes
var command = new SqlCommand("Insert Into Tu_Tabla columna_archivo Values (@archivo)" , sqlConection); // Creamos un SqlCommand que tenga un insert comun, pero apuntando a la columna
command.Parameters.Add("@archivo", SqlDbType.VarBinary, byteArray.Length).Value = byteArray; //Pasamos la referencia del arreglo de bytes
command.ExecuteNonQuery();// Y ejecutamos el query sin retorno
Работать с файлами внутри базы данных не очень хорошая практика, так как вставления и просьбы более дорогие, чем простой текст или какой-то другой числовой тип. Но если возможно.
Здесь покрывает эта тема на английском, дай ему взгляд ;)
AquГ -
[ASP.NET] Записывать Файл в базе данных
объяснило, как ты мог бы вводить файл внутри поля в таблице
Как края, определяется в таблице поле типа varbinary
и чтобы вводить, ты должен перемещать из-за параметра array байт INSERT
.
, Если ты aplicaciГіn winforms
, - очень простой одинокий ты используешь File. ReadAllBytes ()
В примере соединения cГіdigo, что оказывается полезной эта в слое настойчивости
public static void Guardar(string nombrearchivo, int length, byte[] archivo)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
{
conn.Open();
string query = @"INSERT INTO Archivos (nombre, length, archivo)
VALUES (@name, @length, @archivo)";
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("@name", nombrearchivo);
cmd.Parameters.AddWithValue("@length", length);
SqlParameter archParam = cmd.Parameters.Add("@archivo", SqlDbType.VarBinary);
archParam.Value = archivo;
cmd.ExecuteNonQuery();
}
}
производя параметр в INSERT, который позволял бы распределять байт [] файла
Кроме того recomendarГ - в validades, а тебе кажется полезным, его определяет поле как FileStream
, из-за версии Sql Server
, о которых ты упоминаешь, ты можешь использовать это и это больше Гіptimo во время регистрирования файлов в db.