모든 파일 형식을 바이트 배열로 변환하는 것이 데이터베이스 또는 디스크 스토리지에 가장 적합한 솔루션입니까? 특히 GIF, DOC 또는 PDF와 같은 여러 파일 형식을 처리할 때 이 접근 방식이 가장 적합합니까?
대상 데이터베이스가 SQL Server라고 가정하면 이 솔루션은 SQL Server 2005 및 2008을 효과적으로 처리할 수 있습니다. 다음 단계에서는 프로세스를 간략하게 설명합니다.
데이터베이스 테이블 생성:
바이너리 데이터를 저장하기 위해 VARBINARY(MAX)
열이 있는 테이블을 만듭니다. 이 예에서는 "RaportPlik"이라는 VARBINARY(MAX)
유형 열을 포함하는 "Raporty"라는 테이블을 만듭니다.
데이터베이스에 파일을 저장하는 방법:
<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>
데이터베이스에서 파일을 검색하고 저장하는 방법:
<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>
MemoryStream으로 파일을 검색하는 방법:
<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>
MemoryStream을 데이터베이스에 저장하는 방법:
<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>
이러한 방법을 사용하면 SQL Server 데이터베이스에 다양한 형식의 파일을 효율적으로 저장하고 검색할 수 있습니다. 이 방법은 이진 데이터 관리를 위한 간단하고 안정적인 솔루션을 제공합니다.
위 내용은 파일을 데이터베이스에 바이트 배열로 저장하는 것이 다양한 파일 유형에 대한 최적의 접근 방식입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!