如何将文本文档批量数据导入到数据库中

如何将文本文档批量数据导入到数据库中,第1张

aspnet/c#代码实现excel to mssql数据导入

2008年12月17日 星期三 13:42

做网站项目时,可能会遇到将excel文件中的数据导入至sql server数据库的需求,把excel也看作数据库,使用OleDb连接后读取数据然后写入用SqlClient连接的sql server数据库即可,技术上没有什么难度。

但是需要考虑的一个问题是,系统安装的环境一般是专用sql server服务器+web服务器+客户端,而excel文件往往在客户端导入,如果直接使用sql语句读取的话,由于sql在web服务器上运行,不能读取到客户端的excel地址,就会出错了。

既然知道了错误的原因,解决方案也就有了:

1、把客户端的excel上传至web服务器上某文件夹,注意要给该文件夹设置网络用户的“写入”权限;

2、使用OleDb+sql语句读取web服务器上的excel文件

3、将读取的数据写入到sql server 数据库

4、将web服务器上的临时excel删除

部分代码如下:

string filename = FileUpload1PostedFileFileNameSubstring(FileUpload1PostedFileFileNameLastIndexOf("\\"));

FileUpload1PostedFileSaveAs(ServerMapPath("fileupload\\") + filename);//上传文件

string conn = "Provider=MicrosoftJetOLEDB40;Data Source=" + ServerMapPath("fileupload\\") + filename + ";Extended Properties=Excel 80";

string sqlin = "SELECT FROM [Sheet2$]";

OleDbCommand olecommand = new OleDbCommand(sqlin, new OleDbConnection(conn));

OleDbDataAdapter adapterin = new OleDbDataAdapter(olecommand);

DataSet dsin = new DataSet();

adapterinFill(dsin);

DataTable dtin = dsinTables[0];//连接并读取excel数据

for (i = 3; i <= totalrow; i++)//将Excel文件中第一个工作表的数据导入到sql数据库scjd_youliaoxiaohaojihua表中

{

string sql = "insert into scjd_youliaoxiaohaojihua(yuexuhao,danwei,youpin,cheliangmingchengxinghao,zichanxingzhi,chepaihao,qiyou,chaiyou,beizhu) values('";

int j;

sql += DropDownList1SelectedValueToString() + DropDownList3SelectedValueToString();

if (DropDownList1SelectedValueToString() != DateTimeNowYearToString() || intParse(DateTimeNowMonthToString()) != intParse(DropDownList3SelectedValueToString()))

{

sql += "20";

}

else

{

if (intParse(DateTimeNowDayToString()) < 10)

sql += "0";

sql += DateTimeNowDayToString();

}

if (i-3 + count < 9)

sql += "00";

else if (i-3 + count < 99)

sql += "0";

sql += (i -3 + 1 + count)ToString();

sql += "','";

for (j = 1; j < 8; j++)

{//遍历Excel表中一行的所有列,除最后一列

sql += dtinRows[i][j]ToString()Trim();

sql += "','";

}

sql += dtinRows[i][8]ToString()Trim();

sql += "')";

try

{

DoSql(sql);

}

catch (Exception eeeeeee)

{

ResponseWrite("<script>alert('数据导入错误,请检查Excel文件')</script>");

return;

}

}

FileInfo file = new FileInfo(ServerMapPath("fileupload/") + filename);

if (fileExists)

{//删除文件

fileDelete();

}

protected void DoSql(string sql)//执行sql语句的函数

{

SqlConnection conn = new SqlConnection();//创建连接对象

connConnectionString = ConfigurationManagerAppSettings["conn"]ToString();//给连接字符串赋值

connOpen();//打开数据库

SqlCommand cmd = new SqlCommand(sql, conn);

cmdExecuteNonQuery();//

connClose();//关闭数据库

}

注:

1、本文代码均取自我最近刚做的一个小项目,部分数据有较强针对性,并不通用,只有思路通用

2、由于能力和水平问题,部分代码显得有些笨拙,若能灵活运用存储过程,应能大幅度简化代码 只要你的文件能够用记事本打开并格式正确,就可以把他认为是文本文件进行处理

象这种格式的数据没有什么太好的办法,只有从文本文件中逐行读取解析,当读到完整的记录时执行SQL语句插入到数据库中

1、启动SQL企业管理器,选中 表格:1、点击鼠标右键 2、所以任务 3、导入数据

2、选择数据源

3、选择文件路径

4、按txt文本格式,选择相应的分隔符和间距,就可以了。

不知道你要什么样的文本,文本中的内容是否是有格式的:

这里提供下思路,供参考:

1文本文件,基本上式字符格式的了,可以用Reader  io流

2如果是格式化的文本,可以按数据的长度读取,  readInt   readByte

3保存到数据库 当然用JDBC了,如果你读取出来封装成POJO了,也可以选择 OM框架

import javaioBufferedReader;

import javaioFileInputStream;

import javaioIOException;

import javaioInputStreamReader;

/

  文件读取和写入数据库

  @author  樊云升

 

 /

public class FilesReader {

public FilesReader(){

}

/

  读取文件内容

  @param FILE

  @return

 /

public String re_content(String FILE){

String content="";

 try{   

             BufferedReader bufRead=new BufferedReader(new InputStreamReader(new FileInputStream(FILE)));   

             String  str;   

             while((str=bufReadreadLine())!=null){   

               content+=str+"\r\n";   

             }

 }catch(IOException ioe){

   ioeprintStackTrace();

 }

return  content;

}

/

  将特定字符写入数据库中(原来我写的是重写文件,你这里这里将content写入数据库就OK)

  @param path

  @return

 /

public boolean writeFile(String content){

try{

//数据库写入代码

                     }catch(Exception e){

  outclose();

  return false;

 }

return true;

}

public static void main(String[] args) {

String content=new FilesReader()re_content("D:\\AJAXhtm");

                new FilesReader()writeFile(content);

}

}

假如文本文件是按如下格式:

D,356,ABC,12765,,L

C,356,ABD,45678,,M

定义一个1维数组,对文本文件逐行读入,然后逐条添加到数据库的表中,代码如下,本人调试时用了10个字段数据,你可依据你的情况作修改:

Option Explicit

Dim data(10) As String

Dim i As Integer

Private Sub Command1_Click()

Open "c:\txt_mdb\mdlk_sjtxt" For Input As #1

Do Until EOF(1)

Input #1, data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7), data(8), data(9)

Adodc1RecordsetAddNew

For i = 0 To 9

Adodc1Recordset(i) = Trim(data(i))

Next i

Loop

Close

End Sub

Private Sub Form_Load()

Adodc1ConnectionString = "Provider=MicrosoftJetOLEDB40;Data Source=C:\TXT_MDB\db1mdb;Persist Security Info=False"

Adodc1RecordSource = "select from tabel1"

Adodc1Refresh

Text1 = ""

End Sub

方法如下,举例说明:

1、创建测试表,即为要被导入的表:

create table person(

id int not null auto_increment,

name varchar(40) not null,

city varchar(20),

salary int,

primary key(id)

)engine=innodb charset=gb2312;

2、接着写一个用于导入的文本文件:c:\datatxt。

张三

31

北京

3000

李四

25

杭州

4000

王五

45

\N

4500

小明

29

天津

\N

每一项之间用Tab键进行分隔,如果该字段为NULL,则用\N表示。

3、导入数据

输入命令,进行导入。

load

data

local

infile

“c:/datatxt”

into

table

person(name,age,city,salary);

导入数据截图如下:

其中local表示本地。执行后,可以看到NULL数据也被正确地导入。

以上就是关于如何将文本文档批量数据导入到数据库中全部的内容,包括:如何将文本文档批量数据导入到数据库中、如何用sqlldr将文本文件中的数据导入到数据库表中、读取文本文件中的内容存到数据库该怎么实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/10182153.html

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

发表评论

登录后才能评论

评论列表(0条)

保存