栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将任何文件保存到数据库中,仅将其转换为字节数组?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将任何文件保存到数据库中,仅将其转换为字节数组?

由于未提及您的意思是什么数据库,因此我假设使用SQL Server。以下解决方案适用于2005年和2008年。

您必须使用

VARBINARY(MAX)
列之一创建表。在我的例子,我创建的表
Raporty
与列
RaportPlik
之中
VARBINARY(MAX)
列。

file
drive
以下 方法放入 数据库的 方法

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();    }}

此方法是

file
从数据库获取并将其保存在
drive

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); }    }}

该方法是

file
从数据库获取并将其表示为
MemoryStream

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);     //using (var fs = new MemoryStream(memoryStream, FileMode.Create, FileAccess.Write)) {     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;    }

快乐的编码:-)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392299.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号