栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 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号