あらゆる形式のファイルをバイト配列としてデータベースに保存します
さまざまな形式でファイルをデータベースまたはディスクに保存するには、慎重な検討が必要です。一般的なアプローチは、保存する前にファイルをバイト配列に変換することです。この方法を使用すると、あらゆる形式のファイルを保存できますが、それが最良の方法であるかどうかという疑問が生じます。
このプロセスを説明するために、回答に記載されている次のコード スニペットを検討してください。
ファイルをバイト配列として SQL Server データベースに挿入します:
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(); } }
データベースからバイト配列としてファイルを取得します:
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(); byte[] blob = new byte[(int)sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue)]; sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length); memoryStream.Write(blob, 0, blob.Length); } } return memoryStream; }
MemoryStream を使用してファイルをバイト配列としてデータベースに挿入します:
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; }
これらのコード スニペットは、ファイルをバイト配列に変換し、それを VARBINARY(MAX) 型のデータベース列に格納するプロセスを示しています。必要に応じて、ファイルをバイト配列として取得し、新しいファイルとして保存したり、アプリケーションにストリーミングしたりできます。
提供されたテキストはすでに非常に簡潔でよく書かれています。主な変更は、割り当て前にバイト配列の長さが整数に正しくキャストされなかったという databaseFileRead
関数の小さな問題を修正することです。その他の重要な変更はありません。元の意味と構造を維持しながら効果的な言い換えを行うために必要であると考えられました。
以上がファイルをバイト配列としてデータベースに保存するのが最も効率的な方法ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。