Heim >Backend-Entwicklung >C++ >Ist die Konvertierung von Dateien in Byte-Arrays die optimale Lösung für die Datenbankspeicherung?
Zum Speichern von Dateien in einer Datenbank oder auf einem Datenträger sollten Sie die effizienteste und zuverlässigste Methode in Betracht ziehen. Eine Möglichkeit besteht darin, die Datei vor dem Speichern in ein Byte-Array zu konvertieren. In diesem Artikel wird untersucht, ob die Konvertierung von Dateien in Byte-Arrays die beste Strategie zum Speichern beliebiger Dateiformate ist.
Die Eignung der Konvertierung einer Datei in ein Byte-Array für die Datenbankspeicherung hängt von der konkret verwendeten Datenbank ab. Beispielsweise ermöglicht das Erstellen von Tabellen mit VARBINARY(MAX)
-Spalten in SQL Server eine effiziente Speicherung von Byte-Arrays.
Der folgende C#-Code zeigt, wie eine Datei von einem Laufwerk in einer Datenbank gespeichert wird:
<code class="language-csharp">public static void databaseFilePut(string varFilePath) { byte[] file; using (var stream = new FileStream(varFilePath, FileMode.Open, FileAccess.Read)) { using (var reader = new BinaryReader(stream)) { file = reader.ReadBytes((int)stream.Length); } } using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails)) using(var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection)) { sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file; sqlWrite.ExecuteNonQuery(); } }</code>
So rufen Sie eine Datei ab und speichern sie auf Ihrem Laufwerk:
<code class="language-csharp">public static void databaseFileRead(string varID, string varPathToNewLocation) { using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails)) using(var sqlQuery = new SqlCommand(@"SELECT [RaportPlik] FROM [dbo].[Raporty] WHERE [RaportID] = @varID", varConnection)) { sqlQuery.Parameters.AddWithValue("@varID", varID); using (var sqlQueryResult = sqlQuery.ExecuteReader()) if(sqlQueryResult != null) { sqlQueryResult.Read(); var blob = new Byte[(sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))]; sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length); using (var fs = new FileStream(varPathToNewLocation, FileMode.Create, FileAccess.Write)) fs.Write(blob, 0, blob.Length); } } }</code>
Mit dieser Methode kann die Datei als Speicherstream abgerufen werden:
<code class="language-csharp">public static MemoryStream databaseFileRead(string varID) { MemoryStream memoryStream = new MemoryStream(); using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails)) using(var sqlQuery = new SqlCommand(@"SELECT [RaportPlik] FROM [dbo].[Raporty] WHERE [RaportID] = @varID", varConnection)) { sqlQuery.Parameters.AddWithValue("@varID", varID); using (var sqlQueryResult = sqlQuery.ExecuteReader()) if (sqlQueryResult != null) { sqlQueryResult.Read(); var blob = new Byte[(sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))]; sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length); memoryStream.Write(blob, 0, blob.Length); } } return memoryStream; }</code>
Zum Schluss fügen Sie den Speicherstream in die Datenbank ein:
<code class="language-csharp">public static int databaseFilePut(MemoryStream fileToPut) { int varID = 0; byte[] file = fileToPut.ToArray(); const string preparedCommand = @" INSERT INTO [dbo].[Raporty] ([RaportPlik]) VALUES (@File) SELECT [RaportID] FROM [dbo].[Raporty] WHERE [RaportID] = SCOPE_IDENTITY() "; using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails)) using (var sqlWrite = new SqlCommand(preparedCommand, varConnection)) { sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file; using (var sqlWriteQuery = sqlWrite.ExecuteReader()) while (sqlWriteQuery != null && sqlWriteQuery.Read()) { varID = sqlWriteQuery["RaportID"] is int ? (int)sqlWriteQuery["RaportID"] : 0; } } return varID; }</code>
Das Konvertieren einer Datei in ein Byte-Array kann eine effiziente Möglichkeit sein, Dateien beliebigen Formats in einer Datenbank oder auf der Festplatte zu speichern, indem geeignete VARBINARY(MAX)
Spalten in SQL Server verwendet werden. Die bereitgestellten Codebeispiele bieten eine umfassende Implementierung zum Lesen und Schreiben von Binärdateien in der Datenbank und gewährleisten so eine zuverlässige Persistenz und einen zuverlässigen Abruf von Dateien.
Das obige ist der detaillierte Inhalt vonIst die Konvertierung von Dateien in Byte-Arrays die optimale Lösung für die Datenbankspeicherung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!