将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;
//上面两个控件自己添加
None.gifprivate void BtnInsert_Click(object sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif  
dot.gif{
InBlock.gif                
string fPath=this.fName.PostedFile.FileName;//获得要导入的文本文件                  
InBlock.gif
            string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//获得文件的扩展名            
InBlock.gif
            SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//数据库连接对象
InBlock.gif
            con.Open();
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{                    
InBlock.gif                    SqlCommand com
=new SqlCommand("BULK INSERT pubs.dbo.txtInsert FROM '"+fPath+"' WITH  (FIELDTERMINATOR = ',',ROWTERMINATOR= '\n')",con);
InBlock.gif                       
//其中的FIELDTERMINATOR=','指明字段间所使用的分隔符为逗号
InBlock.gif                       
//其中ROWTERMINATOR= '\n'指明记录间所使用的分隔符为回车
InBlock.gif
                    com.ExecuteNonQuery();
InBlock.gif                    Response.Write(
"<script language=javascript>alert('数据导入成功!')</script>");                    
ExpandedSubBlockEnd.gif                }

InBlock.gif             
catch (SqlException SQLexc)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    Response.Write(
"导入数据库时出错:" + SQLexc.ToString());
ExpandedSubBlockEnd.gif                }

InBlock.gifcon.Close();
ExpandedBlockEnd.gif}

好了,这个txt文件的导入相对简单,在数据库中我也没有设置主键,我在里面也没有加出错回滚事务操作,在下面的excel文件的导入中介绍。
3.excel文件的导入
在c盘里建立一个stu.xls文件,在sheet1工作表中有两列数据如下:
     编号  姓名
     1        tom
     2        jack
     3        john
     ......
注意,工作表的第一行是作为标题行的不会被插入到数据库中,真正导入从第二行开始。
为了演示事物出错回滚,在这里将txtInsert数据库表中的id字段设置为主键。实现的C#代码如下:
None.gifprivate void BtnInsert_Click(object sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif  
dot.gif{
InBlock.gif   
string fPath=this.fName.PostedFile.FileName;//获得要导入的文本文件     
InBlock.gif
   string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//获得文件的扩展名   
InBlock.gif
   SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//数据库连接对象
InBlock.gif
   con.Open();   
InBlock.gif    
//注意下面的连接字符串,是它起到了导入的作用
InBlock.gif
    SqlCommand excelCmd=new SqlCommand("insert into txtInsert select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE="+fPath+"',Sheet1$)",con);
InBlock.gif    SqlTransaction myTran
=con.BeginTransaction();//开始一个事务操作
InBlock.gif
    excelCmd.Transaction=myTran;
InBlock.gif    
try
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{       
InBlock.gif     excelCmd.ExecuteNonQuery();
InBlock.gif     myTran.Commit();
//提交事务       
InBlock.gif
     Response.Write("<script language=javascript>alert('数据导入成功!')</script>");
ExpandedSubBlockEnd.gif    }

InBlock.gif    
catch (SqlException err)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{       
InBlock.gif     myTran.Rollback(); 
//出错回滚事务操作
InBlock.gif     
//以下三行是去掉数据库出错信息中的非法字符单引号、回车和换行符,否则在使用时javascript代码将有语法错误
InBlock.gif     
//因为js的编码和c#的编码不同
InBlock.gif
     string errString=err.Message.Replace("'"," ");
InBlock.gif     errString
=errString.Replace(Convert.ToChar(13).ToString(),"");
InBlock.gif     errString
=errString.Replace(Convert.ToChar(10).ToString(),"");
InBlock.gif     
//显示出错信息框
InBlock.gif
     Response.Write("<script language=javascript>alert('导入数据库时出错!详细信息:"+errString+"')</script>");         
ExpandedSubBlockEnd.gif    }
   
InBlock.gif   con.Close();
ExpandedBlockEnd.gif  }
None.gif
这里“显示出错信息框”开始我没有田间那三行代码,结果搞了半天,最后还是在html文件中发现javascript代码部分出现了分行,老是提示“未结束的字符串常量”,所以导致不能打开信息框,郁闷死我了,花了好多时间。
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();None.gif                
                   string mystring="Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '"+fPath+"';Extended Properties=Excel 8.0";
None.gif                OleDbConnection cnnxls 
= new OleDbConnection (mystring);
None.gif                OleDbDataAdapter myDa 
=new OleDbDataAdapter("select * from [Sheet1$]",cnnxls);
None.gif                DataSet myDs 
=new DataSet();
None.gif                myDa.Fill(myDs);
None.gif                
if(myDs.Tables[0].Rows.Count > 0)
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif{
InBlock.gif                    
string strSql = "";
InBlock.gif                    
string CnnString="Provider=SQLOLEDB;database=pubs;server=.;uid=sa;pwd=";
InBlock.gif                    OleDbConnection conn 
=new OleDbConnection(CnnString);
InBlock.gif                    conn.Open ();
InBlock.gif                    OleDbCommand myCmd 
=null;                    
InBlock.gif                    
for(int i=0; i<myDs.Tables[0].Rows.Count;i++)//第一个工作表中行数,不包括第一行,
ExpandedSubBlockStart.gifContractedSubBlock.gif
                    dot.gif{
InBlock.gif                        
strSql="insert into txtInsert(id,name) values (";
InBlock.gif                        strSql 
+= myDs.Tables[0].Rows[i].ItemArray[0].ToString() + ", '";
InBlock.gif                        strSql 
+= myDs.Tables[0].Rows[i].ItemArray[1].ToString() + "')";
InBlock.gif                        myCmd
=new OleDbCommand(strSql,conn);
                        
InBlock.giftry
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{                            
InBlock.gif                            myCmd.ExecuteNonQuery();InBlock.gif                                                        
InBlock.gif                            Response.Write(
"<script language=javascript>alert('数据导入成功!')</script>");
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        
catch (OleDbException err)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{                            InBlock.gif                           
InBlock.gif                            Response.Write(
"导入数据库时出错:" +err.ToString());
InBlock.gif                            
break;
ExpandedSubBlockEnd.gif                        }

ExpandedSubBlockEnd.gif                    }

InBlock.gif                    conn.Close();
其他部分代码自己加吧,这里就是出错失误回滚有点不好处理,请高手指教!!

转载于:https://www.cnblogs.com/mc-dragon/archive/2007/01/18/624238.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 8 Friday:Java 8将彻底改变数据库访问

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 对于Java 8系列 &#xff0c;我们很荣幸主持Iu Ming-Yee Iu博士发表的非常相关的嘉宾帖子。 Iu …

Linux文件权限管理

权限管理 1、权限解读 权限&#xff1a;用户针对文件是否有读、写、执行的权利。 权限划分&#xff1a;读&#xff08;Read&#xff09;、写&#xff08;Write&#xff09;、执行&#xff08;eXecute&#xff09; 权限针对用户的划分&#xff1a;主人&#xff08;User&#xff…

Sqoop数据迁移工具的使用

文章作者&#xff1a;foochane 原文链接&#xff1a;https://foochane.cn/article/2019063001.html Sqoop数据迁移工具的使用 sqoop简单介绍 sqoop数据到HDFS/HIVE sqoop数据到MySQL 1 sqoop简单介绍 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。用…

java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO

在网络编程中&#xff0c;接触到最多的就是利用Socket进行网络通信开发。在Java中主要是以下三种实现方式BIO、NIO、AIO。关于这三个概念的辨析以前一直都是好像懂&#xff0c;但是表达的不是很清楚&#xff0c;下面做个总结完全辨析清楚。1. BIO方式首先我用一个较为通俗的语言…

C++中this指针

由类生成对象时&#xff0c;对象中只保存私有数据。 因为由一个类生成的所有对象为其数据服务的方法都是相同的&#xff0c;因此&#xff0c;一个类中的方法是大家所共用的。 而这就牵扯到当对象A调用方法时&#xff0c;如何保证该方法操作的数据是对象A的数据。 #include<i…

jfinal java搭建_Eclipse快速搭建Jfinal web应用 (一)

JFinal简介JFinal 是基于 Java 语言的极速 WEB ORM 框架&#xff0c;其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率&#xff01;为您节约更多时间&#xff0c…

PHP后台处理jQuery Ajax跨域请求问题 — xx was not called解决办法

// 前台代码 $.ajax({url: http://www.ushark.net/home/save_trial_apply,dataType: jsonp,processData: false,data: $(.layui-layer-content #trialFormInfo).serialize(), }) .done(function(data) {layer.msg(申请成功); }) .fail(function(jqXHR, textStatus, errorThrown…

如何使用VisualVM监视服务器上的多个JVM

在上一篇文章中&#xff0c;我向您展示了如何使用单个管理员服务器和多个托管服务器启动WebLogic Server。 这些启动之后&#xff0c;您如何检查它们的健康状况&#xff1f; 您可以使用管理员的/ console网络应用。 但是&#xff0c;所有默认的Oracle / Open JDK 6附带的另一个…

排序算法 JavaScript

一、冒泡排序 算法介绍&#xff1a; 1.比较相邻的两个元素,如果前一个比后一个大&#xff0c;则交换位置。 2.第一轮把最大的元素放到了最后面。 3.由于每次排序最后一个都是最大的&#xff0c;所以之后按照步骤1排序最后一个元素不用比较。 function bubble_sort(arr){var swa…

[你必须知道的.NET] 第一回:恩怨情仇:is和as

发布日期&#xff1a;2007.4.7 作者&#xff1a;Anytao ©2007 Anytao.com 转贴请注明出处&#xff0c;留此信息。 本文将介绍以下内容&#xff1a; • 类型转换 • is/as操作符小议 1. 引言 类型安全是.NET设计之初重点考虑的内容之一&#xff0c;对于程序设计者来说&…

获取当前鼠标的位置以及组件的位置

总结&#xff1a; div如果要触发鼠标事件要加上css样式cusor:pointer。 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

谷歌推大语言模型VideoPoet:文本图片皆可生成视频和音频

Google Research最近发布了一款名为VideoPoet的大型语言模型&#xff08;LLM&#xff09;&#xff0c;旨在解决当前视频生成领域的挑战。该领域近年来涌现出许多视频生成模型&#xff0c;但在生成连贯的大运动时仍存在瓶颈。现有领先模型要么生成较小的运动&#xff0c;要么在生…

PyCon大会Python主题演讲摘要

PyCon 是全国际最大的以 Python 编程言语 为主题的技能大会。大会由 Python 社区组织&#xff0c;每年举行一次。在大会上&#xff0c;来自国际各地的 Python 用户与中心开发者齐聚一堂&#xff0c;共同同享 Python 国际的新鲜事、Python 言语的应用案例、运用技巧等等内容。 I…

欢迎使用Java 8之前要重温的10个JDK 7功能

Java 8发布已经快一个月了&#xff0c;我敢肯定&#xff0c;大家都在探索JDK 8的新功能。但是&#xff0c;在您完全研究Java 8之前&#xff0c;是时候重新审视Java 7上引入的一些很棒的功能了。记住&#xff0c;Java 6并没有什么功能&#xff0c;它只与JVM的更改和性能有关&…

java版本号管理_微服务项目中如何管理依赖版本号?

本文是微服务项目代码组织形式三部曲中的第三篇&#xff0c;也是最后一篇&#xff0c;通过这三篇文章&#xff0c;相信大家对于如果组织微服务中的代码已经有了一个基本认知&#xff0c;前面两篇分别是&#xff1a;第三篇相对来说要简单一些&#xff0c;本来没打算写&#xff0…

对于刚开始使用该软件,应该在熟悉基本的markdown语法的基础上,再进行快捷键的使用!...

一级标题 # 空格 编写内容 二级标题 ## 空格 编写内容 有序内容 1.Tab 无序内容 -Tab 代码块 print("hello wrold") typora快捷键 ctrl1一级标题 添加图片 表格 CtrlT 姓名年龄职业谢国宏20IT文字加粗 24期的小伙伴们你们好 文字斜体 你好 又粗又斜 粗斜* 3**2 -- 幂…

struct和byte[]相互转换(用Marshal类实现)

转自[DotNet笔记]相当于序列化与反序列化&#xff0c;但是不用借助外部文件1、struct转换为byte[] 1staticbyte[] StructToBytes(objectstructObj) 2{ 3 int size Marshal.SizeOf(structObj); 4 IntPtr buffer Marshal.AllocHGlobal(size); 5 …

Get-CrmSetting返回Unable to connect to the remote server的解决办法

摘要: 微软动态CRM专家罗勇 &#xff0c;回复302或者20190125可方便获取本文&#xff0c;同时可以在第一间得到我发布的最新博文信息&#xff0c;follow me&#xff01;我的网站是 www.luoyong.me 。 在Dynamics 365部署管理器所在的服务器上执行Get-CrmSetting&#xff0c;最近…

java 二维数组奇数金字塔_二维数组:奇数阶魔方 | 新思维:C语言程序设计

幻方&#xff0c;有时又称魔方&#xff0c;由一组排放在正方形中的整数组成&#xff0c;其每行、每列以及两条对角线上的数之和均相等。通常幻方由从到的连续整数组成。Siamese方法(Kraitchik 1942年&#xff0c;pp. 148-149)是构造奇数阶幻方的一种方法&#xff0c;说明如下&a…

拷贝构造函数与赋值函数(运算符重载)(1)

拷贝构造函数拷贝构造函数在三种情况下会被使用1.使用对象来初始化对象时2.当函数的形参是对象时3.当函数的返回值为对象时 2,3情况的本质还是1 //Test1.h #include<iostream> using namespace std; class ST { private:int a;long b; public:ST(int a0, long b0):a(a),…