C#中怎样连接数据库并将查询结果转为实体类以及如何加入事务
场景
新建一个程序,需要对数据的表进行查询并将查询结果转换为实体类,然后将多个实体类
再插入到另一个数据库的表中,执行插入的过程中要使用事务。
注:
博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
不带事务只是查询
//储存数据的工具初始化DataSet idxDs = new DataSet();//constr:数据库连接字符串配置stringconstr="server=localhost;database=Badao;uid=sa;pwd=123";using (SqlConnection conn=new SqlConnection(constr)){conn.Open();Console.WriteLine("开始查询索引数据...");//查询索引数据string idxSql = "SELECT * FROM Idx1_1";//获取sql语句SqlDataAdapter idxSda = new SqlDataAdapter(idxSql, conn); //(查询语句和连接工具)idxSda.Fill(idxDs); //将适配器数据存入DataSet工具中}
注:
首先声明一个DataSet用来存储执行查询的结果,然后使用连接数据的字符串打开连接。
然后使用Adapter执行sql语句,将查询结果填充到Dataset中。
怎样将查询结果与实体类对应赋值
IdxRecord idx = null;Console.WriteLine("开始储存索引数据...");foreach (DataRow row in idxDs.Tables[0].Rows){idx = new IdxRecord();idx.IdxID = DataProcessor.RowValue(row, "Idx_ID", 0);idx.DataPoint = DataProcessor.RowValue(row, "Data_Point", 0);idx.ScheduleIndex = DataProcessor.RowValue(row, "Schedule_Index", 0L); idxList.Add(idx);}
注:
声明一个实体类,其中要有与数据库列所对应的字段。
然后将DataSet中的内容与实体列的属性一一赋值。
最后将实体类对象添加到实体类的list上。
其中DataProcessor.RowValue是一个工具类中的方法,此方法中的第二个参数是对应的数据库中的列
public static short RowValue(DataRow dr, string field, short defaultValue){short Result = defaultValue;if (dr.Table.Columns.Contains(field)){if (dr[field] != null && dr[field] != DBNull.Value){if (short.TryParse(dr[field].ToString(), out Result)){return Result;}}}else{Console.WriteLine("DataTable中不存在[" + field + "]列!");}return defaultValue;}
怎样开启事务并存入数据
//存入bak数据库stringconstrBak="server=localhost;database=BadaoBak;uid=sa;pwd=123";using (SqlConnection conn = new SqlConnection(constrBak))//constr:数据库连接配置{conn.Open();//开启事务SqlTransaction trans = conn.BeginTransaction();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;//添加连接工具cmd.Transaction = trans;//添加事务try{cmd.CommandText = "INSERT INTO idx1_1 values ('" + idx.IdxID + "','" + idx.StepEnd +"')";//添加sql语句cmd.ExecuteNonQuery();//执行Console.WriteLine("插入索引数据成功");trans.Commit();//执行完成之后提交}catch (Exception e){//执行sql语句失败,事务回滚trans.Rollback();}finally{conn.Close();}}
完整示例代码
public static void Main(string[] args){List<IdxRecord> idxList = null; //索引数据//储存数据的工具初始化DataSet idxDs = new DataSet();//constr:数据库连接字符串配置string constr = "server=localhost;database=Badao;uid=sa;pwd=123";using (SqlConnection conn=new SqlConnection(constr)){conn.Open();Console.WriteLine("开始查询索引数据...");//查询索引数据string idxSql = "SELECT * FROM Idx1_1";//获取sql语句SqlDataAdapter idxSda = new SqlDataAdapter(idxSql, conn); //(查询语句和连接工具)idxSda.Fill(idxDs); //将适配器数据存入DataSet工具中idxList = new List<IdxRecord>();IdxRecord idx = null;Console.WriteLine("开始储存索引数据...");foreach (DataRow row in idxDs.Tables[0].Rows){idx = new IdxRecord();idx.IdxID = DataProcessor.RowValue(row, "Idx_ID", 0);idxList.Add(idx);}Console.WriteLine("储存索引数据成功,成功储存数量为:" + idxList.Count);Console.WriteLine("查询索引数据成功");Console.WriteLine("开始根据索引数据查询记录数据...");//在循环中根据索引数据查询记录数据for (int i = 0; i+1 < idxList.Count;i++){List<Record> recordList = new List<Record>();List<List<AuxRecord>> autxRecordsList = new List<List<AuxRecord>>();for (int k = idxList[i].DataPoint; k < idxList[i + 1].DataPoint;k++ ){DataSet recordsDs = new DataSet();DataSet auxTDs = new DataSet();//查询 记录数据string recordSql = "SELECT * FROM WsC1_1 where Data_Point =" + k;//获取sql语句//Console.WriteLine("开始执行的查询语句为:" + recordSql);SqlDataAdapter recordsSda = new SqlDataAdapter(recordSql, conn); //(查询语句和连接工具)recordsSda.Fill(recordsDs); //将适配器数据存入DataSet工具中Record entity = new Record();DataRow row = recordsDs.Tables[0].Rows[0];entity.DataPoint = DataProcessor.RowValue(row, "Data_Point", 0);entity.ScheduleIndex = DataProcessor.RowValue(row, "Schedule_Index", 0L);recordList.Add(entity);//Console.WriteLine("根据索引数据的DataPoint:" + k + "查询到的记录数据的DataPoint:" + entity.DataPoint);//根据索引数据查询辅助通道温度数据Console.WriteLine("开始根据记录数据查询辅助通道温度数据....");List<AuxRecord> autxRecords = new List<AuxRecord>(); //辅助通道温度数据string AuxTSql = "SELECT * FROM Aux1_1_25 where IvIndex =" + entity.AuxIndex;//获取sql语句SqlDataAdapter AuxTSda = new SqlDataAdapter(AuxTSql, conn); //(查询语句和连接工具)AuxTSda.Fill(auxTDs); //将适配器数据存入DataSet工具中//autxRecords = new List<AuxRecord>();AuxRecord aux = null;foreach (DataRow auxrow in auxTDs.Tables[0].Rows){aux = new AuxRecord();aux.DataPoint = DataProcessor.RowValue(auxrow, "Data_Point", 0);aux.IvIndex = DataProcessor.RowValue(auxrow, "IvIndex", 0);foreach (DataColumn col in auxTDs.Tables[0].Columns){if (col.ColumnName.StartsWith("T") || col.ColumnName.StartsWith("V")){aux.Data.Add(DataProcessor.RowValue(row, col.ColumnName, 0D));}}autxRecords.Add(aux);}autxRecordsList.Add(autxRecords);Console.WriteLine("根据记录数据查询辅助通道温度数据成功");}//conn.Close();//开始向数据库插入中传递参数bool isStoreSuccess = StoreRecordData(idxList[i],recordList,autxRecordsList);if (isStoreSuccess){Console.WriteLine("存入数据库成功");}else{Console.WriteLine("存入数据库失败");}//开始休眠Console.WriteLine("开始休眠...");System.Threading.Thread.Sleep(1000 * 5);//Console.WriteLine("休眠结束...");}//Console.WriteLine("查询辅助通道温度数据成功");//Console.ReadKey();}}public static bool StoreRecordData(IdxRecord idx, List<Record> recordList, List<List<AuxRecord>> autxRecordsList){//存入bak数据库string constrBak = "server=localhost;database=BadaoBak;uid=sa;pwd=123";using (SqlConnection conn = new SqlConnection(constrBak))//constr:数据库连接配置{conn.Open();//开启事务SqlTransaction trans = conn.BeginTransaction();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;//添加连接工具cmd.Transaction = trans;//添加事务try{cmd.CommandText = "INSERT INTO idx1_1 values ('" + idx.IdxID + "','" + idx.DataPoint + "','" + idx.StepEnd +"')";//添加sql语句cmd.ExecuteNonQuery();//执行Console.WriteLine("插入索引数据成功");foreach(Record record in recordList){cmd.CommandText = "INSERT INTO WsC1_1 values ('" + record.DataPoint + "','" + record.ScheduleIndex + "','" + record.AuxIndex + "')";//添加sql语句cmd.ExecuteNonQuery();//执行}Console.WriteLine("插入记录数据成功");foreach (List<AuxRecord> auxRecords in autxRecordsList){cmd.CommandText = "INSERT INTO Aux1_1_25 values ('" + auxRecords[0].DataPoint + "','" + auxRecords[0].IvIndex + "','" + auxRecords[0].Data[0] + "')";//添加sql语句cmd.ExecuteNonQuery();//执行}Console.WriteLine("插入辅助通道温度数据成功");trans.Commit();//执行完成之后提交return true;}catch (Exception e){//执行sql语句失败,事务回滚trans.Rollback();return false;}finally{conn.Close();}}}
C#中怎样连接数据库并将查询结果转为实体类以及如何加入事务相关推荐
- jpa 原生sql 查询返回一个实体_JPA查询--使用原生sql 并且把查询结果转为实体对象...
这篇文章主要记录 使用原生sql查询 并且把查询结果转为实体对象, 注意:这儿使用的数据库 是oracle数据库 这儿记录了三种查询:精确查询,模糊查询,分页查询. 1.把原生sql查询的结果转为实体 ...
- JPA多表关联查询,自定义实体类接收返回的结果集
在项目中使用jpa进行多表连接查询,基本上返回的都是多张表中的数据.那么问题来了,这关联返回的数据那么多,还是不同表当中的数据,数据库中也没有表和它对应啊,怎么处理呢?返回Object吗 1.教师类 ...
- MybatisPlus忽略实体类中的非数据库字段、JPA忽略实体类中的非数据库字段、HeHibernate忽略实体类中的非数据库字段
mybatis plus忽略映射字段时可以在实体类属性上使用以下注解: @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的. @TableField(e ...
- Java中实现连接数据库并进行查询
首先我们在在File中选择new在选择java project在任意取一个名字,如图: 选择才创建的项目userManager,在src下分别创建dao包,DBHelper包(可直接在其他项目中把它复 ...
- JPA多表查询映射自定义实体类(包含两个表字段)
https://blog.csdn.net/weixin_44665225/article/details/89918778
- 浅谈三层架构中的实体类(C#)
最近因为三层架构中的实体类,引发了不少小问题,下面列举一下,谈谈自己的感想. 本文所指的实体类仅限于三层中的实体类,即数据库表的映射. 一.为什么要用实体类? | 使程序简洁易懂,便于维护. | ...
- mybatis多表查询出来的实体如何映射_mybatis进阶案例之多表查询
mybatis进阶案例之多表查询 一.mybatis中表之间的关系 在数据库中,实体型之间的关系主要有如下几种: 1.一对一 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之 ...
- java查询数据库返回数据映射到实体类,不返回字段为空的属性
查询mysql数据库,映射字段内容到实体类中,以下两种场景可以指定实体类返回的字段 情景1: 有些字段为null,指定有值返回 情景2:只想返回实体类中的部分字段,查询语句指定select后面要返回的 ...
- JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
原文地址:http://www.cnblogs.com/taven/p/3351841.html JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法 在Spr ...
最新文章
- http://blog.csdn.net/fanzhonglei
- PAL算法原理及代码实现
- 关于HTML头文件中的meta
- C语言之字符串处理函数
- flink批流统一​(还没完成)
- 在Google的AppEngine上升级到Java 7
- 【VBA】多条件去重
- 2021中国音乐市场年度综合分析
- 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(四)
- 数学与泛型编程:高效编程的奥秘pdf_Java 泛型与类型擦除
- python程序员到哪里_Python程序员都知道的入门知识の五
- Java Swing线程之SwingUtilities.invokeLater解释
- I Think I Can!
- FlashDevelop4 快捷键
- 【SAP消息号AA776】
- sip软电话免费下载地址(eyebeam)
- CIC滤波器的设计与仿真
- 【论文】 各高校的毕业论文的Latex模板链接
- 爆强的一些文句, 太经典了
- linux笔记本 亮度调节,Ubuntu Linux笔记本屏幕背光亮度调节
热门文章
- redhat php5 安装,完整的linux(RedHat)+php5.3.10+mysql5.5.19+apache2.2.22安装配置说明
- python类型提示包 检查静态类型_Pyright:微软提供的Python静态类型检查器
- 正圆锥体空间方程_你也可以理解“麦克斯韦方程组”
- BlockingQueue常用方法add、off、put、take、poll使用说明
- 2019年终总结一下吧
- python 模拟登陆智联_Python+scrapy爬虫之模拟登陆
- android tv 源代码,android_tv_metro
- java -jar 停止_推荐:Linux启动Java程序jar包Shell脚本
- istqb证书含金量_“性能测试” 领域含金量最高的资格认证:LoadRunner ASP
- python入门之函数调用第一关_零基础学习 Python 之与函数的初次相见