由于项目需要,要往数据库中导入一些历史数据,而这些历史数据都是线下人工记录的,所以有很多不规范的地方,比如:同一个公司的名称在不同的记录中可能相差那么几个字,而且每条数据不是每个字段都是完整的,等等诸如此类的不规范问题。如何规范化,并且将这些若干excel表格的数据切分并且导入到数据库中的若干表中,并且这些表之间有着一对一或者一对多等关系,识别这些关系仅仅靠SQL是不行的,存储过程我也不了解,不知道能否满足需求。但是用c#加ADO.NET操作SQLServer还是很方便的,所以就决定使用C#。

下面列出一些比较常用的而且很方便的函数,还有一些常用的用c#操作数据库写法。

对于Excel表格,我直接将里面的数据copy到txt里面,这个过程中Excel表格一行中的每两个格子之间会自动添加制表符,然后利用c#的File类的静态方法一次性读取所有行:

string[] applycontract_origin = File.ReadAllLines("D:/1.txt");

这个用来读取文本再方便不过了,只需要一句话即可。

c#操作SQLServer的常用方法:

 private static string connStr = "Server=127.0.0.1;database=test;UID=sa;PWD=123456";
 private static SqlConnection conn = new SqlConnection(connStr);

首先当然要打开数据库连接:

conn.Open();

这是连接字符串和创建连接的代码,下面是选取数据的代码:

string selectLeaderCompany = @"select * from company_info";
SqlDataAdapter dataAdapter = new SqlDataAdapter(selectLeaderCompany, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
return ds;

下面是插入数据的写法:

string insertsql = "insert into tb_company_info (COMPANY_NM,REG_DATE) values('@name,getdate())" + ";select SCOPE_IDENTITY() as 'Identity'";
SqlCommand insertCmd = new SqlCommand(insertsql, conn);
SqlParameter p1 = new SqlParameter("@name", SqlDbType.VarChar,200);
string name = "ssss";
p1.Value = name;
insertCmd.Parameters.Add(p1);
string newid = insertCmd.ExecuteScalar().ToString();

这里需要注意的是如果要获取插入数据的自增长ID,那么就要加入select SCOPE_IDENTITY(),获取自增长ID的方法有三种,要根据自己的需要选择合适的方法, SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY都可以获取,具体区别在这里我就不细说了,网上相关资料很多。

如果不需要返回自增长ID,就如下执行:

insertCmd.ExecuteNonQuery();

删除和更新操作都和插入数据的写法一样,只需要更改sql语句即可。

对于选取数据的操作获取的DataSet,可以在程序里动态添加数据:

string selectLeaderCompany = @"select * from tb_company_info";
SqlDataAdapter dataAdapter = new SqlDataAdapter(selectLeaderCompany, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
DataRow newRow = ds.Tables[0].NewRow();
newRow["columname"] = "newValue";
...
ds.Tables[0].Rows.Add(newRow)

构造新的Row的时候如上述方法构造,不能使用构造函数,我觉得原因在于构造函数没法定义新行的列结构,而通过已经存在的Table构造新行就可以使用它的结构来初始化新行。
程序的最后别忘了关闭连接:

conn.Close();

如果想插入null数据,那么请使用:

p[7].Value = DBNull.Value;//p是sqlparameter类型的数组

附带SqlDbType和SQLServer类型之间的对应关系:

http://www.cnblogs.com/Relict/archive/2011/12/19/2293460.html

对于:

private static SqlParameter amount = new SqlParameter("@amount", SqlDbType.Decimal);

上面的Decimal类型,可以如下设置精度:

amount.Precision = 18;
amount.Scale = 2;

这样一来,利用ADO.NET对数据库进行基本操作就总结完了。

利用ADO.NET处理数据的简单之处相关推荐

  1. vba ado返回集合_利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总

    大家好,今天继续讲解<VBA数据库解决方案>,今日讲解的是第37讲,利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总.最近的内容实用性比较强,如今日的内容,只把需要汇总的EXCE ...

  2. 利用Echarts+Springboot实现数据可视化 数据可视化 Spring实现简单的数据可视化 自定义可视化图表

    最近在做大数据项目,先做了个数据可视化. 简单来说就是: 利用Echarts + Springboot实现数据可视化 Echarts:调用Echarts.js的API实现图标数据展示  (echart ...

  3. asp oracle 分页显示,利用ASP实现Oracle数据记录的分页显示

    [IT168 服务器学院]一.引言 通过浏览器访问数据量大的表时需要进行分页.ASP对数据库记录分页显示可以通过ADO对象集Recordset对象来实现.Recordset具有以下几个用于分页显示的属 ...

  4. asp.net oracle 分页,asp.net教程之利用ASP实现Oracle数据记录的分页显示

    一.引言 通过浏览器访问数据量大的表时需要进行分页.ASP对数据库记录分页显示可以通过ADO对象集Recordset对象来实现.Recordset具有以下几个用于分页显示的属性: PageSize:每 ...

  5. MITRE:利用微生物组时间序列数据推断与宿主状态变化相关的特征

    文章目录 MITRE:利用微生物组时间序列数据推断与宿主状态变化相关的特征 热心肠日报 写在前面 主要结果 图1. MITRE通过对时间序列的微生物群落的系统发育信息进行学习,同宿主的状态改变联系起来 ...

  6. 利用WinPcap技术捕获数据包

    前言  随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要.在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数 ...

  7. 机器学习实战(十一)利用PCA来简化数据

    第十三章 利用PCA来简化数据 13.1 降维技术 13.1.1 主成分分析(PrincipalComponentAnalysis,PCA) 13.1.2 因子分析(Factor Analysis) ...

  8. 利用反射修改final数据域

    当final修饰一个数据域时,意义是声明该数据域是最终的,不可修改的.常见的使用场景就是eclipse自动生成的serialVersionUID一般都是final的. 另外还可以构造线程安全(thre ...

  9. mysql 列数据显示转成行数据显示_Mysql的列修改成行并显示数据的简单实现

    创建测试表: DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `year` int(11) DEFAULT NULL, `month` int(1 ...

最新文章

  1. redis在PHP中的基本使用案例
  2. CVPR2021(Oral) 商汤、港中文实现单目人脸重建新突破: 基于生成网络的渲染器!几何形状更精准!渲染效果更真实!...
  3. Python标准库:itertools迭代器函数
  4. 【NET CORE微服务一条龙应用】开始篇与目录
  5. IE8提示JS错误(KB927917)终极解决方法
  6. git 32位_编译64位的BorderlessGaming
  7. 机器学习——文件的读取
  8. Linux中g++与gcc的区别
  9. java正则表达式 ppt_Java正则表达式演示
  10. SQLAlchemy Transactions
  11. MOM SMS SharePoint
  12. 六、面向对象,会了面向对象妈妈再也不用担心我找不到对象了!
  13. webservice视频教程-基于SOA 思想下的WebService实战
  14. hp1015驱动64位_惠普1015驱动下载|惠普1015打印机驱动电脑版 - 极光下载站
  15. cv2.resize()函数不同插值方法比较
  16. The word 'jsp' is not correctly spelled. Eclipse 拼写检查出错处理办法
  17. java IO学习心得
  18. 公开「处刑」!波士顿动力的搬砖机器人,私下竟「翻车」不断
  19. Unity特效学习笔记——子弹
  20. 技术解读|马云见证!蚂蚁金服推出全球首个区块链跨境汇款服务

热门文章

  1. 数据中台咋就从“小甜甜”变成了“牛夫人”?
  2. 写一段问候即将做手术的人的话
  3. 设计模式读书笔记-----工厂方法模式
  4. 【JavaScript】------- JavaScript 文件大小转换,字节转换成K、M、G、T 单位
  5. 邮政营销计算机考试,邮政业务营销员操作试题
  6. Apache Geode 1.3 初步配置
  7. windows验证mysql是否安装成功
  8. c语言 case语句用大括号,c++ - 关于“ switch”中“ case”语句中的花括号 - 堆栈内存溢出...
  9. 【WY】数据分析 — Pandas 阶段一 :基础语法 三 —— 数据结构:DataFrame
  10. msm8660 add lcd driver