打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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();                }            }        }

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ADO.NET
C# 读取 Access 数据库表的例子
C#数据库编程
ADO.NET入门教程(六) 谈谈Command对象与数据检索
ExecuteReader的用法
C#批量插入数据到Sqlserver中的四种方式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服