怎么将Excel中的数据传到数据库中

怎么将Excel中的数据传到数据库中,第1张

打开企业管理器,打开要导入数据数据库,在表上按右键,所有任务-->导入数据,d出DTS导入/导出向导,按 下一步 , 2、选择数据源 Microsoft Excel 97-2000,文件名 选择要导入的xls文件,按 下一步 , 3、选择目的 用于SQL Server 的Microsoft OLE DB提供程序,服务器选择本地(如果是本地数据库的话,如 VVV),使用SQL Server身份验证,用户名sa,密码为空,数据库选择要导入数据的数据库(如 client),按 下一步 , 4、选择 用一条查询指定要传输的数据,按 下一步 , 5、按 查询生成器,在源表列表中,有要导入的xls文件的列,将各列加入到右边的 选中的列 列表中,这一步一定要注意,加入列的顺序一定要与数据库中字段定义的顺序相同,否则将会出错,按 下一步 , 6、选择要对数据进行排列的顺序,在这一步中选择的列就是在查询语

最近利用空闲时间自己在写一个文件备份工具,因为我磁盘上的很多文件很重要,例如很多PPT和讲义。所以需要经常备份,而且因为这些文件很多,所以需要增量备份。

我尝试用过windows自带的ntbackup工具,但感觉不是很爽。它不支持压缩备份,而且界面也有点复杂。

为了响应伟大领袖的“自力更生,丰衣足食”的号召,咱决定自己写一个工具,专门备份到数据库。支持压缩,支持加密,支持增量。

本文分享一下其中一些重点的技术细节

其中一个关键的技术就是将文件使用二进制的方式存放在数据库的varbinary(max)的字段中。该字段最大允许的长度为2GB。

对于一些小文件,我们可以一次性读取它的所有字节,然后一次提交到数据库

/// <summary>

/// 这个方法演示了如何一次提交所有的字节。这样导致的结果是:应用程序立即需要申请等同于文件大小的内存

/// </summary>

static void SubmitFileByOnce() {

string file = @"F:\功夫熊猫rmvb";//文件大小为519MB

byte[] buffer = FileReadAllBytes(file);

using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true")) {

using (SqlCommand cmd = connCreateCommand())

{

cmdCommandText = "INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)";

cmdParametersAddRange(

new[]

{

new SqlParameter("@fileName",file),

new SqlParameter("@fileContents",buffer)

});

connOpen();

cmdExecuteNonQuery();

connClose();

}

}

}

但是,上面的方法有几个问题,主要体现在如果文件比较大的话

1 它需要一次性很大的内存,具体数据等同于文件大小。因为FileReadAllBytes方法是将所有字节全部读入到内存。

2 它会导致提交失败,就是因为数据太大了。数据库也会拒绝。

那么,我就对这个方法做了一下改进,将文件拆分为5MB一段,也就是说,此时每次申请的内存只有5MB。这就大大地提高了可用性。

/// <summary>

/// 这个方法是将文件切分为5MB的块,每次只是提交5MB,所以可能多次提交,但内存占用就比较小

/// </summary>

static void SubmitFileStepByStep() {

string file = @"F:\功夫熊猫rmvb";//以这个文件为例,大小为519MB,一共需要的时间大约94秒。还是有点慢的,所以还可能需要进行压缩

FileStream fs = new FileStream(file, FileModeOpen);

byte[] buffer = new byte[5 1024 1024];

int readCount;

using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true"))

{

connOpen();

while ((readCount = fsRead(buffer, 0, bufferLength)) > 0)

{

using (SqlCommand cmd = connCreateCommand())

{

cmdCommandText = "INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)";

cmdParametersAddRange(

new[]

{

new SqlParameter("@fileName",file),

new SqlParameter("@fileContents",buffer)

});

cmdExecuteNonQuery();

}

}

connClose();

}

}

这样的话,有一个后果就是一个文件,可能在数据库中会有多条记录。所以在读取的时候,我们需要对其进行合并

static void DownloadFile() {

string file = @"F:\功夫熊猫rmvb";

string destfile = @"E:\Temp\Tempwmv";

using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true"))

{

using (SqlCommand cmd = connCreateCommand())

{

cmdCommandText = "SELECT FileContents FROM Files WHERE FileName=@fileName";

cmdParametersAddRange(

new[]

{

new SqlParameter("@fileName",file),

});

connOpen();

SqlDataReader reader = cmdExecuteReader();

FileStream fs = new FileStream(destfile, FileModeAppend, FileAccessWrite);

while (readerRead())

{

byte[] buffer = (byte[])reader[0];

fsWrite(buffer, 0, bufferLength);

}

fsClose();

readerClose();

connClose();

}

}

}

本文由作者:陈希章

附加数据库就可以完成

附加数据库:企业管理器--右键"数据库"--所有任务--附加数据库

--选择你的mdf文件名--确定--如果提示没有ldf文件,是否创建,选择"是"

查询分析器中的方法:

--有数据文件及日志文件的情况

sp_attach_db

'数据库名'

,'数据文件名(mdf注意要带目录)'

--后面可以是用,分隔的该数据库的多个数据文件

,'日志文件名(ldf注意要带目录)'--后面可以是用,分隔的该数据库的多个日志文件

--如果只有数据文件的情况,'数据文件名(mdf注意要带目录)'

--后面可以是用,分隔的该数据库的多个数据文件

首先数据库存储数据有自己的格式:基本数据类型、二进制。。

怎么存储文件形式的数据?

1、针对txt文件,读取文本内容,数据库字段设置数据类型text,将读取的文本内容存入数据库。

2、转化为二进制存入数据库,读取文件,转化为二进制流,数据库字段设置bit,之后将二进制数据存入数据库,

3、将txt文件保存服务器制定目录下,在数据库中存储txt的绝对路径,访问时直接访问文件即可。

以上就是关于怎么将Excel中的数据传到数据库中全部的内容,包括:怎么将Excel中的数据传到数据库中、如何将大文件写入到数据库中、如何将数据库文件导入数据库中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10154382.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存