将txt文件和excel文件导入SQL2000数据库
来源:互联网 发布:佳能打印软件下载 编辑:程序博客网 时间:2024/04/30 13:09
将txt文件和excel文件导入SQL2000数据库
在做一些web数据库管理系统的时候经常要实现将帐户批量注册的功能,今天就来讲讲如何在C#-web项目中将txt文件和excel文件导入SQL2000数据库。1.数据库准备
在SQL2000数据库的实例数据库pubs中建立一个数据表txtInsert,字段很简单:id,name两个。
2.txt文本文件导入
对于数据文件导入与导出SQL2000提供了BULK INSERT和BCP语句,在这里可以使用BULK INSERT命令实现。假设在c盘上有一个文本文件stu.txt内容为:
1,tom
2,jack
3,jhon
......
实现导入的C#代码如下:
protected System.Web.UI.HtmlControls.HtmlInputFile fName;
protected System.Web.UI.WebControls.Button BtnInsert;
//上面两个控件自己添加
private void BtnInsert_Click(object sender, System.EventArgs e)
{
string fPath=this.fName.PostedFile.FileName;//获得要导入的文本文件
string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//获得文件的扩展名
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//数据库连接对象
con.Open();
try
{
SqlCommand com=new SqlCommand("BULK INSERT pubs.dbo.txtInsert FROM '"+fPath+"' WITH (FIELDTERMINATOR = ',',ROWTERMINATOR= '/n')",con);
//其中的FIELDTERMINATOR=','指明字段间所使用的分隔符为逗号
//其中ROWTERMINATOR= '/n'指明记录间所使用的分隔符为回车
com.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('数据导入成功!')</script>");
}
catch (SqlException SQLexc)
{
Response.Write("导入数据库时出错:" + SQLexc.ToString());
}
con.Close();
}
{
string fPath=this.fName.PostedFile.FileName;//获得要导入的文本文件
string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//获得文件的扩展名
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//数据库连接对象
con.Open();
try
{
SqlCommand com=new SqlCommand("BULK INSERT pubs.dbo.txtInsert FROM '"+fPath+"' WITH (FIELDTERMINATOR = ',',ROWTERMINATOR= '/n')",con);
//其中的FIELDTERMINATOR=','指明字段间所使用的分隔符为逗号
//其中ROWTERMINATOR= '/n'指明记录间所使用的分隔符为回车
com.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('数据导入成功!')</script>");
}
catch (SqlException SQLexc)
{
Response.Write("导入数据库时出错:" + SQLexc.ToString());
}
con.Close();
}
好了,这个txt文件的导入相对简单,在数据库中我也没有设置主键,我在里面也没有加出错回滚事务操作,在下面的excel文件的导入中介绍。
3.excel文件的导入
在c盘里建立一个stu.xls文件,在sheet1工作表中有两列数据如下:
编号 姓名
1 tom
2 jack
3 john
......
注意,工作表的第一行是作为标题行的不会被插入到数据库中,真正导入从第二行开始。
为了演示事物出错回滚,在这里将txtInsert数据库表中的id字段设置为主键。实现的C#代码如下:
private void BtnInsert_Click(object sender, System.EventArgs e)
{
string fPath=this.fName.PostedFile.FileName;//获得要导入的文本文件
string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//获得文件的扩展名
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//数据库连接对象
con.Open();
//注意下面的连接字符串,是它起到了导入的作用
SqlCommand excelCmd=new SqlCommand("insert into txtInsert select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE="+fPath+"',Sheet1$)",con);
SqlTransaction myTran=con.BeginTransaction();//开始一个事务操作
excelCmd.Transaction=myTran;
try
{
excelCmd.ExecuteNonQuery();
myTran.Commit();//提交事务
Response.Write("<script language=javascript>alert('数据导入成功!')</script>");
}
catch (SqlException err)
{
myTran.Rollback(); //出错回滚事务操作
//以下三行是去掉数据库出错信息中的非法字符单引号、回车和换行符,否则在使用时javascript代码将有语法错误
//因为js的编码和c#的编码不同
string errString=err.Message.Replace("'"," ");
errString=errString.Replace(Convert.ToChar(13).ToString(),"");
errString=errString.Replace(Convert.ToChar(10).ToString(),"");
//显示出错信息框
Response.Write("<script language=javascript>alert('导入数据库时出错!详细信息:"+errString+"')</script>");
}
con.Close();
}
这里“显示出错信息框”开始我没有田间那三行代码,结果搞了半天,最后还是在html文件中发现javascript代码部分出现了分行,老是提示“未结束的字符串常量”,所以导致不能打开信息框,郁闷死我了,花了好多时间。{
string fPath=this.fName.PostedFile.FileName;//获得要导入的文本文件
string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//获得文件的扩展名
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//数据库连接对象
con.Open();
//注意下面的连接字符串,是它起到了导入的作用
SqlCommand excelCmd=new SqlCommand("insert into txtInsert select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE="+fPath+"',Sheet1$)",con);
SqlTransaction myTran=con.BeginTransaction();//开始一个事务操作
excelCmd.Transaction=myTran;
try
{
excelCmd.ExecuteNonQuery();
myTran.Commit();//提交事务
Response.Write("<script language=javascript>alert('数据导入成功!')</script>");
}
catch (SqlException err)
{
myTran.Rollback(); //出错回滚事务操作
//以下三行是去掉数据库出错信息中的非法字符单引号、回车和换行符,否则在使用时javascript代码将有语法错误
//因为js的编码和c#的编码不同
string errString=err.Message.Replace("'"," ");
errString=errString.Replace(Convert.ToChar(13).ToString(),"");
errString=errString.Replace(Convert.ToChar(10).ToString(),"");
//显示出错信息框
Response.Write("<script language=javascript>alert('导入数据库时出错!详细信息:"+errString+"')</script>");
}
con.Close();
}
4.将excel中部分列导入数据库的方法
上面讲了关于将整个excel文件导入数据库的方法,那么在实际项目中遇到将excel文件中若干列导入数据库怎么办的呢,原理差不多,我就将代码直接给出了:
string fPath=this.fName.PostedFile.FileName;//获得要导入的文本文件
string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//获得文件的扩展名
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//数据库连接对象
con.Open();
string mystring="Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '"+fPath+"';Extended Properties=Excel 8.0";
OleDbConnection cnnxls = new OleDbConnection (mystring);
OleDbDataAdapter myDa =new OleDbDataAdapter("select * from [Sheet1$]",cnnxls);
DataSet myDs =new DataSet();
myDa.Fill(myDs);
if(myDs.Tables[0].Rows.Count > 0)
{
string strSql = "";
string CnnString="Provider=SQLOLEDB;database=pubs;server=.;uid=sa;pwd=";
OleDbConnection conn =new OleDbConnection(CnnString);
conn.Open ();
OleDbCommand myCmd =null;
for(int i=0; i<myDs.Tables[0].Rows.Count;i++)//第一个工作表中行数,不包括第一行,
{
strSql="insert into txtInsert(id,name) values (";
strSql += myDs.Tables[0].Rows[i].ItemArray[0].ToString() + ", '";
strSql += myDs.Tables[0].Rows[i].ItemArray[1].ToString() + "')";
myCmd=new OleDbCommand(strSql,conn);
try
{
myCmd.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('数据导入成功!')</script>");
}
catch (OleDbException err)
{
Response.Write("导入数据库时出错:" +err.ToString());
break;
}
}
conn.Close();其他部分代码自己加吧,这里就是出错失误回滚有点不好处理,请高手指教!!
string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//获得文件的扩展名
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//数据库连接对象
con.Open();
string mystring="Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '"+fPath+"';Extended Properties=Excel 8.0";
OleDbConnection cnnxls = new OleDbConnection (mystring);
OleDbDataAdapter myDa =new OleDbDataAdapter("select * from [Sheet1$]",cnnxls);
DataSet myDs =new DataSet();
myDa.Fill(myDs);
if(myDs.Tables[0].Rows.Count > 0)
{
string strSql = "";
string CnnString="Provider=SQLOLEDB;database=pubs;server=.;uid=sa;pwd=";
OleDbConnection conn =new OleDbConnection(CnnString);
conn.Open ();
OleDbCommand myCmd =null;
for(int i=0; i<myDs.Tables[0].Rows.Count;i++)//第一个工作表中行数,不包括第一行,
{
strSql="insert into txtInsert(id,name) values (";
strSql += myDs.Tables[0].Rows[i].ItemArray[0].ToString() + ", '";
strSql += myDs.Tables[0].Rows[i].ItemArray[1].ToString() + "')";
myCmd=new OleDbCommand(strSql,conn);
try
{
myCmd.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('数据导入成功!')</script>");
}
catch (OleDbException err)
{
Response.Write("导入数据库时出错:" +err.ToString());
break;
}
}
conn.Close();其他部分代码自己加吧,这里就是出错失误回滚有点不好处理,请高手指教!!
posted on 2007-01-18 23:22 虞山居士 阅读(1059) 评论(3) 编辑 收藏 所属分类: C#.net技术
评论:
#1楼 [楼主] 2007-01-18 23:27 | 虞山居士
对于将DataGrid中的数据导出到txt或excel文件的介绍,我将在后面讲!
回复 引用 查看
回复 引用 查看
#2楼 2007-05-31 11:00 | vjjj [未注册用户]
使用bulk insert 导入数据后
用select * from pubs.dbo.txtInsert 可以
但是加上条件就不行了,为什么
比如 知道导入的数据有“a”
执行下边的语句
select * from pubs.dbo.txtInsert where 字段名=‘a’
回复 引用 查看
用select * from pubs.dbo.txtInsert 可以
但是加上条件就不行了,为什么
比如 知道导入的数据有“a”
执行下边的语句
select * from pubs.dbo.txtInsert where 字段名=‘a’
回复 引用 查看
#3楼 [楼主] 2007-06-01 19:28 | 虞山居士
没有问题的啊,我这里可以的!下面是代码:
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//数据库连接对象
con.Open();
SqlDataAdapter sda=new SqlDataAdapter();
sda.SelectCommand=new SqlCommand("select * from pubs.dbo.txtInsert where name='tom'",con);
DataSet ds=new DataSet(); //创建一个数据集作为本地的数据库
sda.Fill(ds,"table"); //实现数据的填充
this.dg1.DataSource=ds.Tables["table"]; //得到从远程数据库得到的数据表
this.dg1.DataBind(); //在数据显示前一定要先绑定数据,这样就可以显示信息了
con.Close();
回复 引用 查看
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//数据库连接对象
con.Open();
SqlDataAdapter sda=new SqlDataAdapter();
sda.SelectCommand=new SqlCommand("select * from pubs.dbo.txtInsert where name='tom'",con);
DataSet ds=new DataSet(); //创建一个数据集作为本地的数据库
sda.Fill(ds,"table"); //实现数据的填充
this.dg1.DataSource=ds.Tables["table"]; //得到从远程数据库得到的数据表
this.dg1.DataBind(); //在数据显示前一定要先绑定数据,这样就可以显示信息了
con.Close();
回复 引用 查看
- 将txt文件和excel文件导入SQL2000数据库
- 将txt文件和excel文件导入SQL2000数据库
- 将txt文件和excel文件导入SQL2000数据库
- 将txt文件和excel文件导入SQL2000数据库
- 将txt文件和excel文件导入SQL2000数据库
- 将txt文件和excel文件导入SQL2000数据库
- 将txt文件和excel文件导入SQL2000数据库
- excel文件导入SQL2000数据库
- 将Excel或者Txt文件中的数据导入Oracle数据库
- plsql 导入excel文件和txt文件
- php将txt文件数据导入数据库
- txt文件导入excel
- springMVC将txt文件或Excel文件中的内容上传并导入数据库
- txt文件导入数据库
- java POI 将txt文件导入到excel中
- 将Excel文件数据库导入SQL Server
- 将Excel文件数据库导入SQL Server
- 将Excel文件数据库导入SQL Server
- Windows程序设计之--消息分流器
- sql server 连接字符串
- 关于Dispose在aspx.cs上的使用
- webspere安装
- Java中对象的比较 == 和 equals()
- 将txt文件和excel文件导入SQL2000数据库
- 郁闷啊
- ASPX页生成静态HTML页(五种方案)
- MFC开发QQ游戏客户端登录界面
- 疑问
- 用javascript代码实现对客户端ip地址的获取
- 利用CSS的Clip属性来创造多彩文字
- Query接口学习笔记
- Javascript之getAttribute()方法 setAttribute()方法