C#中读取文本文件导入SQL数据库解决方法

c#连接SQL数据库并读取数据表的两种方法 今天分享一下C#如何连接数据库并且读取数据表的两种方法。 C#连接SQL数据库主要通过微软库函数来实现,具体步骤分为以下三步 第一,使用SqlConnection对象连接数据库; 需要引用System.Data.SqlClient; 第二,建立SqlCommand对象,负责SQL语句的执行和存储过程的调用; 第三,第二步会执行SQL语句,然后对SQL或存储过程执行后返回的**“结果”**进行操作。... 阅读详情
概述:
   文本文件是一种非常常用的文件格式,因其通用的阅读方式而经常被用做不同单位的数据交换文件格式。
   文本文件需要能够正确导入数据库,
        必须要满足以下两个条件其中之一:
            1:文本文件的结构格式固定,长度固定.
            2:文本文件每行长度不固定,但每个字段之间有特殊符号分开.
        本文给出的是满足条件1的文本文件导入到数据库的解决方法,对于满足条件2的文本文件,道理类似,
        有兴趣的朋友可以自行测试,如有问题,欢迎交流和沟通!
 
一:问题描述:
这是老婆大人单位的一个项目,需求其实还是比较清晰的:要求编写Asp.Net程序,自动读取每天生成的文本文件,
根据业务逻辑处理后,保存到SQLSERVER数据库。
文本格式定义:
1:每一行具有相同固定格式,一行就对应于数据库中的一条记录,记录的每个字段都有明确的长度定义。
2:每一行文本都是连续的,中间没有任何的特殊的符号来区分不同的字段。
3:文本中有英文字母和数字,也可能有中文汉字。
4:格式规定,一个英文字母或数字对应的长度为1,中文汉字对应的长度为2.
        根据项目需求分析,整个需求并不复杂,一般来说,文本文件需要能够正确导入数据库,
        必须要满足以下两个条件其中之一:
            1:文本文件的结构格式固定,长度固定.
            2:文本文件每行长度不固定,但每个字段之间有特殊符号分开.
        上述需求满足条件1,肯定可以能正确导入到数据库。
 
二:初步的解决思路和步骤
         1:读取文本文件内容到数据流StreamReader 
         2:开始事务 
         3:循环从数据流中读取每一行到字符串,按表结构定义通过SubString函数对字符串进行截取到每一个字段变量。 
         4:定义SQL存储过程,传入步骤3中的每个字段值,在存储过程中完成每条记录的插入! 
         5:执行事务 
         6:事务回滚 
         7:错误消息捕捉,返回友好信息提示 
         8:释放相关资源
 
三:实际开发中出现的问题与解决方法
       问题:
           实际的程序中,按照文本文件定义的字段长度进行字符串截取,取出来的字符串长度与实际长度不一致,不论是使用bg2312编码还是默认编码。 具体现象通过调试跟踪,在C#中,不论是英文字母还是汉字,取出来的长度也是1,而不是如文本文件中规定的那样,汉字长度为2.导致整个字符串与实际定义的长度不一致,所以在用SubString()函数截取字符串时,无法根据数据结构定义中的长度正确取得每个字段值。
      原因分析:
           问题原因很明显是编码格式出现问题,汉字保存在磁盘中的编码有多种,常见的有:GB、BIG5 、Unicode、UTF-7、UTF-8等。在文本文件读取过程中,  文件的编码(Encoding)和StreamReader/Writer指定的Encoding不对应,就会出现乱码问题。虽然StreamReader可以根据文本文件格式自动识别编码格 式,正确读取不同编码格式的文本文件。但对于字符串来说,是无法识别字符串中的中文字符与英文,数字的区别,统一都作用长度为1处理。正确的处 理方法是使用将字符串转换为字节数组,对字节数组按文本文件定义的字段长度读取每个字段值。
 
四:修正的解决思路
         1:读取文本文件内容到数据流StreamReader 
         2:开始事务 
         3:循环从数据流中读取每一行到字符串,并转换为字节数组。按表结构定义对字节数组进行截取到每一个字段变量。 
         4:定义SQL存储过程,传入步骤3中的每个字段值,在存储过程中完成每条记录的插入! 
         5:执行事务 
         6:事务回滚 
         7:错误消息捕捉,返回友好信息提示 
         8:释放相关资源
 
 
五:相关的文本文件处理函数参考,完整的源码见附件
 

    /// <summary>
    /// 通用函数,读文本文件
    /// </summary>
    /// <param name="fileName">读入的文本文件名称</param>
    publicstatic void ReadTextFromFileName(string fileName)    
    {
      string strRecord = "";

      //读入文本文件时,一定要指定文件的编码格式.其中:default为文本文件本来的编码格式
      //如果是简体中文的文本文件,也可以这样设置编码格
C#把Excel表格数据导入到 SQL Server 数据库 开发工具与关键技术:VS C# 作者:梁茵茵 撰写时间:2019年 5月 6日 把数据导入到页面上的时候,也就是把数据导入到数据库。所以不是直接点击导入按钮选择要导入的数据就可以直接把数据导入到页面上的,而是要下载一个模板,这个模板的格式要跟页面的格式一致。下载的模板的第一行也就是表头的列,要对应页面表格第一行的表头的列。导入表格的格式要跟页面表格的格式一一对应,这样导入进来的数据才匹配。 下面... 阅读详情

相关推荐

C# 连接sql数据库对 access,excel导入导出操作

 一、SQL SERVER 和ACCESS的数据导入导出常规的数据导入导出:使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:   ○1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation   ○2Services(数据转换服务),然后选择  czdImport Data

Raymond的程序之路 3127

C#实现TXT文本数据批量导入SQL Server

<br />用程序就是将文本文件的每行根据固定的分隔符用Split函数分割,然后逐个加到参数中去..<br />给个简单的Demo<br />SQL code <br />create database data<br />go<br />use data<br />go<br />create table custom<br />(<br />    客户名 varchar(20),<br />    联系方式 varchar(10),<br />    住址 varchar(50)<br />)<br

Dailen_Liao的专栏 5782

C#读取txt文本文件存入sql

这是自己因为工作需要写的一个C#小程序,主要思路是一行一行的读取,做字符串操作,存入数据库。具体请看代码。

C# txt文本数据导入sql server

C# xt文本数据按行,导入sql server 增加到listbox里显示

.net 读取文本文档的内容并插入mysql数据库

.net 读取文本文档的内容,文本文档内容间隔为|,并插入到mysql数据库,从读取文件-入库过程代码

asp.net 读取文本文件并插入数据库的实现代码

由此,需要操作以下几个步骤 1,上传txt文件至公司系统 2,读取需要的内容 3,将内容插入到数据库中(需要判断重复) 4,与现有订单数据进行对比 本程序只研究读取需要的内容和插入数据库 代码如下: using System; using System.Data; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Text; using System.Text.Regula

史上最全的Logisim运算器实验教程(基于华中科技大学计算机组成原理实验)

本博客是实现了Logisim的运算器设计,有具体的运算器设计的思路和运算器设计的电路,适合一步一步的按照思路做。

qq_62325622的博客 4万+

STM32L431电池供电项目实战:用STOP2模式把功耗降到5uA以下(CubeMX配置详解)

本文详细介绍了如何在STM32L431电池供电项目中利用STOP2模式实现5μA以下的超低功耗设计。通过CubeMX配置、硬件优化和软件策略,成功将农业温湿度监测节点的待机功耗控制在4.7μA,确保CR2032电池供电下3年以上的工作寿命。文章包含完整的低功耗实现路径和实测数据,特别适合物联网边缘设备开发者参考。

weixin_30345577的博客 395

双目立体匹配算法:SGBM

SGBM(Semi-Global Block Matching)是一种用于计算双目视觉中视差(disparity)的半全局匹配算法,在OpenCV中的实现为semi-global block matching(SGBM)。它是基于全局匹配算法和局部匹配算法的优缺点,提出了一种折中的方法,既能保证视差图的质量,又能降低计算复杂度。

weixin_45303602的博客 9413

ITK-snap医学图像标注方法(超级详细)——保姆级

医学3D图像标注方法,非常详细,保姆级

jialiyk的博客 3万+

麒麟银河操作系统V10部署ffmpeg(也能用于Linux系统)

部署ffmpeg用来处理视频的各种操作,如编码解码,格式转换,剪辑,处理实时视频流,音频流,加滤镜等

zhouwenxing666的博客 9041

20、七鳃鳗繁殖与早期生活史:从水质到养殖的全面解析

本文全面解析了七鳃鳗的繁殖与早期生活史,重点探讨了水质对幼体生存的影响、养殖密度与生长关系、变态过程的时间与大小特征,以及人工繁殖在濒危物种恢复和入侵物种控制中的应用。同时,文章分析了大规模养殖面临的挖掘基质需求、空间限制、清洁管理、疾病防控及微生物环境等挑战,并强调实验室养殖对科学研究和种群管理的重要意义。随着技术进步,未来有望扩展更多物种的繁殖研究,揭示七鳃鳗生物学的进化奥秘,实现资源的可持续利用。

l6m7n8的博客 116

华为OD机考双机位C卷 - 螺旋数字矩阵 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 数字螺旋矩阵(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 3219

tun虚拟网卡没有安装解决之道

目录 描述 过程 一、sstap 会提示你虚拟网卡没有安装; 二、还有会是这样的:病毒和威胁防护中无法启动;引擎不可以用等等,以及会显示需要IT管理员去处理;等等报错的信息; 系统升级地方会显示:Windows Defender Antivirus 的安全智能更新 - KB2267602 (版本 1.305.2147.0) - 错误 0xc8000442 Windows Defender报错; 三、还有就是会出现你搜自己家的WIFI搜不到,电脑端都不会显示WIFI名字; 解决方...

战神/calmness的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: 使用AdsiEdit工具查看GC数据
下一篇: 快捷方式查找目标失效的一种解决方法
SuperITPro
博客等级 码龄15年 12粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值