Ich baue eine C#-Desktop-Anwendung und muss eine Datei in die Datenbank speichern. Ich habe mir einen Dateiauswähler überlegt, der mir den richtigen Dateipfad gibt. Nun habe ich die Frage, wie ich diese Datei mithilfe ihres Pfads in die Datenbank speichern kann.
Antworten
Zu viele Anzeigen?Es hängt wirklich vom Typ und der Größe der Datei ab. Wenn es sich um eine Textdatei handelt, könnten Sie File.ReadAllText()
verwenden, um eine Zeichenfolge zu erhalten, die Sie in Ihrer Datenbank speichern können.
Wenn es keine Textdatei ist, könnten Sie File.ReadAllBytes()
verwenden, um die binären Daten der Datei zu erhalten, und diese dann in Ihrer Datenbank speichern.
Aber seien Sie vorsichtig, Datenbanken sind keine gute Möglichkeit, um große Dateien zu speichern (es wird zu einigen Leistungsproblemen führen).
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
int numBytes = new FileInfo(fileName).Length;
byte[] buff = br.ReadBytes(numBytes);
Dann laden Sie es wie alles andere in die Datenbank hoch. Ich nehme an, Sie verwenden eine varbinary-Spalte (BLOB)
Also FileStream wäre es, aber da Sie SQL 2K5 verwenden, müssen Sie es auf die Art des Einlesens in den Speicher umstellen; was viele Ressourcen verbraucht.
Zunächst einmal ist der Spaltentyp varchar(max) Ihr Freund, denn dies gibt Ihnen ~2 GB an Daten zum Spielen, was für die meisten Anwendungen ziemlich groß ist.
Lesen Sie die Daten dann in ein Byte-Array ein und konvertieren Sie es in einen Base64String um.
FileInfo _fileInfo = new FileInfo(openFileDialog1.FileName);
if (_fileInfo.Length < 2147483647) //2147483647 - ist die maximale Größe der Daten 1,9 GB
{
byte[] _fileData = new byte[_fileInfo.Length];
_fileInfo.OpenRead().Read(_fileData, 0, (int)_fileInfo.Length);
string _data = Convert.ToBase64String(_fileData);
}
else
{
MessageBox.Show("Datei ist zu groß für die Datenbank.");
}
Und kehren Sie den Prozess um, um die Daten wiederherzustellen.
byte[] _fileData = Convert.FromBase64String(_data);
Sie sollten diese Strings so schnell wie möglich entsorgen, indem Sie sie auf string.empty setzen, sobald Sie sie nicht mehr benötigen!
Aber wenn möglich, aktualisieren Sie einfach auf 2008 und verwenden Sie FILESTREAM.
Wenn Sie SQL Server 2008 verwenden, könnten Sie FILESTREAM verwenden (Einstiegshandbuch hier). Ein Beispiel für die Verwendung dieser Funktionalität von C# finden Sie hier.