CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

老问题:将文本文件导入数据库

楼主dingdaohua(小数点)2006-03-07 13:06:23 在 .NET技术 / C# 提问

查了CSDN好多文章但还是实现不了,原因本人较笨啊,希望贵人能给出代码,谢谢  
  文本文件如:  
  0001,123546,200  
  0002,154545,1000  
  0003,456454,120  
  以上为工号,帐号,金额,一个奖金的导入程序  
  现需:提取文本文件,然后显示在datagridview中,再根据用户需要如修改、删除,然后插入到数据库中,谢谢 问题点数:100、回复次数:20Top

1 楼dingdaohua(小数点)回复于 2006-03-07 13:10:53 得分 0

数据库为sql   server2000,vs2005,winformTop

2 楼jiezhi(风满袖)回复于 2006-03-07 13:12:36 得分 10

可以先导入到excel中,然后导入数据库中(比如access的导入功能,sql   server的dts工具)Top

3 楼dingdaohua(小数点)回复于 2006-03-07 13:14:21 得分 0

但必须用程序导入,不会写代码:(Top

4 楼lovvver(ElephantTalk.Bright)回复于 2006-03-07 13:18:11 得分 0

读取文件,一行一行的取,批量构造sql语句,然后插入。Top

5 楼lovvver(ElephantTalk.Bright)回复于 2006-03-07 13:20:38 得分 10

直接在程序里构造:insert   into   tb   select   第一行   union   all   select   第二行   union   all...  
  你的问题可以化为以下三个问题:  
  读txt文件你会吗?  
  构造这个sql语句有问题吗?  
  在c#里执行这个sql语句有问题吗?  
   
  这三个问题,都很简单。这里都能够找到例子。  
  Top

6 楼Aden(Aden)回复于 2006-03-07 13:21:32 得分 10

直接用sql   server2000的dts工具,将文本导入库中  
   
  用程序实现的话,先读行,然后,对行进行字符分割,再导入,sql.  
   
        if((FileUp.PostedFile   !=   null)   &&   FileUp.PostedFile.ContentLength   >   0)  
        {  
          if(FileUp.PostedFile.FileName.Substring(FileUp.PostedFile.FileName.LastIndexOf(".")).ToString()==   ".txt")  
          {  
            this.ListBox1.SelectionMode   =   System.Web.UI.WebControls.ListSelectionMode.Multiple;  
            this.ListBox1.DataSource   =   null;  
             
            try    
            {    
              string   fn   =   System.IO.Path.GetFileName(FileUp.PostedFile.FileName);  
              string   dr   =   Server.MapPath("UploadFiles");  
   
              if(!Directory.Exists(dr))  
              {  
                Directory.CreateDirectory(Server.MapPath("UploadFiles"));  
              }  
   
              string   saveLocation   =   Server.MapPath("UploadFiles")   +   "\\"   +   fn;  
   
              if(File.Exists(saveLocation))  
              {  
                File.Delete(saveLocation);  
              }  
   
            try  
              {  
                FileUp.PostedFile.SaveAs(saveLocation);  
              }  
              catch   (   Exception   ex   )  
              {  
                Response.Write("<script   language='javascript'>alert('保存文件时错误信息:'+   '"+ex.ToString()+"');history.back(-2)</script>");  
                Response.End();  
              }  
   
               
              FileStream   fs   =   new   FileStream(saveLocation,FileMode.Open);  
              using(TextReader     sr   =   new   StreamReader(fs,System.Text.Encoding.GetEncoding("gb2312")))  
              {  
                String   line;  
                SqlConnection   dbConn   =   new   SqlConnection(strConn);  
                try  
                {  
                  dbConn.Open();  
   
                  while   ((line   =   sr.ReadLine())   !=   null)    
                  {  
   
                    if(line.Length   ==   11)  
                    {  
                      this.ListBox1.Items.Add(line);  
                      MultDelDesign(line.ToString(),dbConn);  
                    }  
   
   
                }  
                }  
                catch(Exception   ex)  
                {  
                  Response.Write("<script   language='javascript'>alert('错误信息:'+   '"+ex.ToString()+"');history.back(-1)</script>");  
                  Response.End();  
                }  
                finally  
                {  
                  sr.Close();  
                  dbConn.Close();  
                }  
   
              }  
             
              fs.Close();  
   
              if(File.Exists(saveLocation))  
              {  
                File.Delete(saveLocation);  
              }  
                                                                                                                       
            }  
            catch(Exception   ex)  
            {  
              Response.Write("<script   language='javascript'>alert('错误信息:'+   '"+ex.ToString()+"');history.back(-1)</script>");  
              Response.End();  
            }  
             
          }  
          else  
          {  
            Response.Write("<script   language='javascript'>alert('请选择要上传的文本文件!');history.back(-1)</script>");  
            Response.End();  
          }  
        }  
        else  
        {  
          Response.Write("<script   language='javascript'>alert('请导入号码文件,文件格式是文本文件!');history.back(-1)</script>");  
          Response.End();  
        }  
      }  
  Top

7 楼zhongkeruanjian(编程亮子)回复于 2006-03-07 13:22:18 得分 0

估计啥都不会,你最好把所有代码贴给他,呵呵Top

8 楼dingdaohua(小数点)回复于 2006-03-07 13:22:32 得分 0

to   lovvver(春晖)   都没问题,但是我要先查看这个数据,然后再决定是否插入数据库,用"Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=c:\txtFilesFolder\;Extended   Properties=""text;HDR=Yes;FMT=Delimited"""把他作为一个数据源对象行不行啊,因为我是一个标准的数据结构  
  Top

9 楼abandonship(焚酒煮剑)回复于 2006-03-07 13:22:55 得分 0

通过excel吧Top

10 楼dingdaohua(小数点)回复于 2006-03-07 13:24:51 得分 0

excel怎样处理啊Top

11 楼lovvver(ElephantTalk.Bright)回复于 2006-03-07 13:37:01 得分 40

to   楼主:  
  完全可以,你这个业务逻辑最好在存储过程中处理。  
  让存储过程来返回数据集。  
   
  如果你把数据通过判断把它显示到datagrid,并且能够写到库里的话,你的方法完全可行。  
  Top

12 楼lovvver(ElephantTalk.Bright)回复于 2006-03-07 13:37:40 得分 30

你一个读/写txt文件的存储过程:  
   
  /*--调用示例  
  --数据导出  
  exec   p_binaryIO   'zj','','','acc_演示数据..tb','img','c:\zj1.dat'  
   
  --数据导入  
  exec   p_binaryIO   'zj','','','acc_演示数据..tb','img','c:\zj1.dat','',0  
  --*/  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_binaryIO]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_binaryIO]  
  GO  
   
  Create   proc   p_binaryIO  
  @servename   varchar   (30),--服务器名称  
  @username   varchar   (30),   --用户名  
  @password   varchar   (30), --密码  
  @tbname   varchar   (500),   --数据库..表名  
  @fdname   varchar   (30),   --字段名  
  @fname   varchar   (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+_temp  
  @tj   varchar   (1000)='',   --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀  
  @isout   bit=1 --1导出((默认),0导入  
  AS    
  declare   @fname_in   varchar(1000) --bcp处理应答文件名  
  ,@fsize   varchar(20) --要处理的文件的大小  
  ,@m_tbname   varchar(50) --临时表名  
  ,@sql   varchar(8000)  
   
  --则取得导入文件的大小  
  if   @isout=1    
  set   @fsize='0'  
  else  
  begin  
  create   table   #tb(可选名   varchar(20),大小   int  
  ,创建日期   varchar(10),创建时间   varchar(20)  
  ,上次写操作日期   varchar(10),上次写操作时间   varchar(20)  
  ,上次访问日期   varchar(10),上次访问时间   varchar(20),特性   int)  
  insert   into   #tb  
  exec   master..xp_getfiledetails   @fname  
  select   @fsize=大小   from   #tb  
  drop   table   #tb  
  if   @fsize   is   null  
  begin  
  print   '文件未找到'  
  return  
  end  
   
  end  
   
  --生成数据处理应答文件  
  set   @m_tbname='[##temp'+cast(newid()   as   varchar(40))+']'  
  set   @sql='select   *   into   '+@m_tbname+'   from(  
  select   null   as   类型  
  union   all   select   0   as   前缀  
  union   all   select   '+@fsize+'   as   长度  
  union   all   select   null   as   结束  
  union   all   select   null   as   格式  
  )   a'  
  exec(@sql)  
  select   @fname_in=@fname+'_temp'  
  ,@sql='bcp   "'+@m_tbname+'"   out   "'+@fname_in  
  +'"   /S"'+@servename  
  +case   when   isnull(@username,'')=''   then   ''    
  else   '"   /U"'+@username   end  
  +'"   /P"'+isnull(@password,'')+'"   /c'  
  exec   master..xp_cmdshell   @sql  
  --删除临时表  
  set   @sql='drop   table   '+@m_tbname  
  exec(@sql)  
   
  if   @isout=1  
  begin  
  set   @sql='bcp   "select   top   1   '+@fdname+'   from   '    
  +@tbname+case   isnull(@tj,'')   when   ''   then   ''  
  else   '   where   '+@tj   end  
  +'"   queryout   "'+@fname  
  +'"   /S"'+@servename  
  +case   when   isnull(@username,'')=''   then   ''    
  else   '"   /U"'+@username   end  
  +'"   /P"'+isnull(@password,'')  
  +'"   /i"'+@fname_in+'"'  
  exec   master..xp_cmdshell   @sql  
  end  
  else  
  begin  
  --为数据导入准备临时表  
  set   @sql='select   top   0   '+@fdname+'   into   '  
  +@m_tbname+'   from   '   +@tbname  
  exec(@sql)  
   
  --将数据导入到临时表  
  set   @sql='bcp   "'+@m_tbname+'"   in   "'+@fname  
  +'"   /S"'+@servename  
  +case   when   isnull(@username,'')=''   then   ''    
  else   '"   /U"'+@username   end  
  +'"   /P"'+isnull(@password,'')  
  +'"   /i"'+@fname_in+'"'  
  exec   master..xp_cmdshell   @sql  
   
  --将数据导入到正式表中  
  set   @sql='update   '+@tbname  
  +'   set   '+@fdname+'=b.'+@fdname  
  +'   from   '+@tbname+'   a,'  
  +@m_tbname+'   b'  
  +case   isnull(@tj,'')   when   ''   then   ''  
  else   '   where   '+@tj   end  
  exec(@sql)  
   
  --删除数据处理临时表  
  set   @sql='drop   table   '+@m_tbname  
  end  
   
  --删除数据处理应答文件  
  set   @sql='del   '+@fname_in  
  exec   master..xp_cmdshell   @sql  
   
  go  
  Top

13 楼lovvver(ElephantTalk.Bright)回复于 2006-03-07 13:39:00 得分 0

以上存储过程:bcp   实现二进制文件的导入导出。Top

14 楼cdo(Everything has a favourable turn)回复于 2006-03-07 13:56:07 得分 0

创建dataTable加入row和column来操作。Top

15 楼dingdaohua(小数点)回复于 2006-03-07 14:11:55 得分 0

谢谢lovvver(春晖)   ,方法都还知道,代码还是老老实实自己写吧,呵呵,谢谢Top

16 楼lovvver(ElephantTalk.Bright)回复于 2006-03-07 14:23:41 得分 0

找现成的代码很难的,简单的还有,稍微复杂/特殊的,基本找不到。  
  写一遍也无妨啊,还可以练习练习。Top

17 楼siteer0344()回复于 2006-03-08 08:43:47 得分 0

www.source520.com           免费免注册80G源码书籍下载Top

18 楼bbbbcccc()回复于 2006-03-08 14:16:22 得分 0

http://valenhua.go3.icpcn.com/Top

19 楼wanyong775(渔民:小小的网少年)回复于 2006-03-08 14:54:09 得分 0

markTop

20 楼cxianfa(含笑)回复于 2006-03-09 00:14:11 得分 0

vb中我知道怎么处理,不过这里我也不懂。才开始学Top

相关问题

  • 文本文件导入数据库
  • 文本文件导入数据库
  • 老问题,20万条记录的文本文件导入到 oracle数据库的某个空表中
  • 怎样吧这样的文本文件导入mysql数据库?
  • 寻求文本文件导入数据库的好办法。
  • 文本文件数据导入数据库
  • 怎么在把远程的文本文件导入数据库
  • txt文本文件导入数据库的问题
  • 文本文件导入ORACLE数据库,用C#代码实现
  • 制表符间隔的文本文件导入数据库的问题!

关键词

  • sql server2000
  • 数据库
  • 数据
  • 语句
  • 存储过程
  • 代码
  • 文件
  • savelocation
  • 导入
  • 文本文件

得分解答快速导航

  • 帖主:dingdaohua
  • jiezhi
  • lovvver
  • Aden
  • lovvver
  • lovvver

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo