一起谈.NET技术,概括ADO.NET数据库连接的所有形式(基础)

简介:   你可能熟悉其中部分数据库读取的形式,但是熟悉全部的估计很少,或者你完全忘记了,因为这些形式被封装到你自己框架的底层,自己搞过一两次就在也没有动手写过了。但是笔者觉得这部分知识是应该牢固掌握的,这个是基础。

  你可能熟悉其中部分数据库读取的形式,但是熟悉全部的估计很少,或者你完全忘记了,因为这些形式被封装到你自己框架的底层,自己搞过一两次就在也没有动手写过了。但是笔者觉得这部分知识是应该牢固掌握的,这个是基础。

第一种:通过直接在cs文件中编写查询语句调用 dbcom.ExecuteNonQuery();执行插入数据

 
 
1 // 连接字符串
2   string ConnectionString = ConfigurationManager.ConnectionStrings[ " db_Test01ConnectionString " ].ConnectionString;
3   string ProviderName = ConfigurationManager.ConnectionStrings[ " db_Test01ConnectionString " ].ProviderName;
4 DbProviderFactory dbproviderfactory = DbProviderFactories.GetFactory(ProviderName);
5 DbConnection dbcon = dbproviderfactory.CreateConnection();
6 dbcon.ConnectionString = ConnectionString;
7 DbCommand dbcom = dbproviderfactory.CreateCommand();
8 dbcom.Connection = dbcon;
9 dbcom.CommandText = " Insert into dt_Table01(name,psw) values(@name,@psw) " ;
10 dbcom.CommandType = CommandType.Text;
11
12   // 添加参数
13 DbParameter dbparameter = dbproviderfactory.CreateParameter();
14 dbparameter.ParameterName = " @name " ;
15 dbparameter.DbType = DbType.String;
16 dbparameter.Value = " xiaolong " ;
17 dbcom.Parameters.Add(dbparameter);
18 dbparameter = dbproviderfactory.CreateParameter();
19 dbparameter.ParameterName = " @psw " ;
20 dbparameter.DbType = DbType.String;
21 dbparameter.Value = " 123 " ;
22 dbcom.Parameters.Add(dbparameter);
23 dbcon.Open();
24   try
25 {
26 dbcom.ExecuteNonQuery();
27 }
28   catch (Exception ex)
29 {
30 // 将错误写入日志里
31 AddLogError(ex.ToString());
32 Response.Redirect( " ~/ErrorPage.aspx " );
33 }
34   finally
35 {
36 dbcon.Close();
37 }

第二种:当然是调用存储过程

 
 
1 // 存储过程的
2   string ConnectionString = ConfigurationManager.ConnectionStrings[ " db_Test01ConnectionString " ].ConnectionString;
3   string ProviderName = ConfigurationManager.ConnectionStrings[ " db_Test01ConnectionString " ].ProviderName;
4 DbProviderFactory dbproviderfactory = DbProviderFactories.GetFactory(ProviderName);
5 DbConnection dbcon = dbproviderfactory.CreateConnection();
6 dbcon.ConnectionString = ConnectionString;
7 DbCommand dbcom = dbproviderfactory.CreateCommand();
8 dbcom.Connection = dbcon;
9 dbcom.CommandType = CommandType.StoredProcedure;
10 dbcom.CommandText = " InsertTable01 " ;
11 DbParameter dbparameter = dbproviderfactory.CreateParameter();
12 dbparameter.DbType = DbType.String;
13 dbparameter.ParameterName = " @name " ;
14 dbparameter.Value = " xiaohe " ;
15 dbcom.Parameters.Add(dbparameter);
16 dbparameter = dbproviderfactory.CreateParameter();
17 dbparameter.ParameterName = " @psw " ;
18 dbparameter.DbType = DbType.String;
19 dbparameter.Value = " 123 " ;
20 dbcom.Parameters.Add(dbparameter);
21 dbcon.Open();
22   try
23 {
24 dbcom.ExecuteNonQuery();
25 }
26   catch (Exception ex)
27 {
28 AddLogError(ex.ToString());
29 Response.Redirect( " ~/ErrorPage.aspx " );
30 }
31   finally
32 {
33 dbcon.Close();
34 }
 

第三种:就是可能同时插入两张表或者三张表或者更多。必须是同时,运用到了事务回滚机制。存储过程写法就不给出来了和上面一样。只是在存储过程编写事务。

 
 
1 // 同时插入两张的表
2   string ConnectionString = ConfigurationManager.ConnectionStrings[ " db_Test01ConnectionString " ].ConnectionString;
3   string ProviderName = ConfigurationManager.ConnectionStrings[ " db_Test01ConnectionString " ].ProviderName;
4 DbProviderFactory dbproviderfactory = DbProviderFactories.GetFactory(ProviderName);
5 DbConnection dbcon = dbproviderfactory.CreateConnection();
6 dbcon.ConnectionString = ConnectionString;
7 DbCommand dbcom = dbproviderfactory.CreateCommand();
8 dbcom.Connection = dbcon;
9 dbcom.CommandType = CommandType.Text;
10
11 DbParameter dbparameter = dbproviderfactory.CreateParameter();
12 dbparameter.DbType = DbType.String;
13 dbparameter.ParameterName = " @name " ;
14 dbparameter.Value = " xiaohei " ;
15 dbcom.Parameters.Add(dbparameter);
16 dbparameter = dbproviderfactory.CreateParameter();
17 dbparameter.ParameterName = " @psw " ;
18 dbparameter.DbType = DbType.String;
19 dbparameter.Value = " 123 " ;
20 dbcom.Parameters.Add(dbparameter);
21 dbparameter = dbproviderfactory.CreateParameter();
22 dbparameter.DbType = DbType.String;
23 dbparameter.ParameterName = " @teacher " ;
24 dbparameter.Value = " heihei " ;
25 dbcom.Parameters.Add(dbparameter);
26
27 dbcon.Open();
28   // 事务开始
29 DbTransaction dbtran = dbcon.BeginTransaction();
30 dbcom.Transaction = dbtran;
31
32 try
33 {
34 dbcom.CommandText = " insert into dt_table01(name,psw) values(@name,@psw) " ;
35 dbcom.ExecuteNonQuery();
36 dbcom.CommandText = " insert into dt_table03(teacher,psw) values(@teacher,@psw) " ;
37 dbcom.ExecuteNonQuery();
38 // 成功就提交
39 dbtran.Commit();
40 }
41 catch (Exception ex)
42 {
43 // 出错就回滚
44 dbtran.Rollback();
45 AddLogError(ex.ToString());
46 Response.Redirect( " ~/ErrorPage.aspx " );
47 }
48 finally
49 {
50 dbcon.Close();
51 dbtran.Dispose();
52 }

第四种:通过使用DbDataAdapter来获得查询的结果

 
 
1 // 查询数据库
2 string ConnectionString = ConfigurationManager.ConnectionStrings[ " db_Test01ConnectionString " ].ConnectionString;
3 string ProviderName = ConfigurationManager.ConnectionStrings[ " db_Test01ConnectionString " ].ProviderName;
4 DbProviderFactory dbproviderfactory = DbProviderFactories.GetFactory(ProviderName);
5 DbConnection dbcon = dbproviderfactory.CreateConnection();
6 dbcon.ConnectionString = ConnectionString;
7 DbCommand dbcom = dbproviderfactory.CreateCommand();
8 dbcom.Connection = dbcon;
9 dbcom.CommandText = " Select * from dt_Table01 where name=@name " ;
10 dbcom.CommandType = CommandType.Text;
11 DbParameter dbparameter = dbproviderfactory.CreateParameter();
12 dbparameter.ParameterName = " @name " ;
13 dbparameter.DbType = DbType.String;
14 dbparameter.Value = " xiaolong " ;
15 dbcom.Parameters.Add(dbparameter);
16 DataSet ds = new DataSet();
17 DbDataAdapter dbDataAdapeter = dbproviderfactory.CreateDataAdapter();
18 dbDataAdapeter.SelectCommand = dbcom;
19 try
20 {
21 dbDataAdapeter.Fill(ds, " data " );
22 }
23 catch (Exception ex)
24 {
25 AddLogError(ex.ToString());
26 Response.Redirect( " ~/ErrorPage.aspx " );
27 }
28 finally
29 {
30 dbDataAdapeter.Dispose();
31 }

第5种:使用DbDataReader或者查询结果,这里给出查询第一行第一列值,当然也可以直接调用Command.ExecuteScalar();函数

 
 
1 string ConnectionString = ConfigurationManager.ConnectionStrings[ " db_Test01ConnectionString " ].ConnectionString;
2 string ProviderName = ConfigurationManager.ConnectionStrings[ " db_Test01ConnectionString " ].ProviderName;
3 DbProviderFactory dbproviderfactory = DbProviderFactories.GetFactory(ProviderName);
4 DbConnection dbcon = dbproviderfactory.CreateConnection();
5 dbcon.ConnectionString = ConnectionString;
6 DbCommand dbcom = dbproviderfactory.CreateCommand();
7 dbcom.Connection = dbcon;
8 dbcom.CommandText = " Select * from dt_Table01 where name=@name " ;
9 dbcom.CommandType = CommandType.Text;
10 DbParameter dbparameter = dbproviderfactory.CreateParameter();
11 dbparameter.ParameterName = " @name " ;
12 dbparameter.DbType = DbType.String;
13 dbparameter.Value = " xiaolong " ;
14 dbcom.Parameters.Add(dbparameter);
15 dbcon.Open();
16 DbDataReader dbDataReader = null;
17 string re = string .Empty;
18 try
19 {
20 dbDataReader = dbcom.ExecuteReader(CommandBehavior.SingleRow);
21 }
22 catch (Exception ex)
23 {
24 AddLogError(ex.ToString());
25 Response.Redirect( " ~/ErrorPage.aspx " );
26 }
27 finally
28 {
29 dbcon.Close();
30 dbDataReader.Close();
31 }
32 // 读入值
33 if (dbDataReader.Read())
34 {
35 // 得到第一列值
36 re = dbDataReader.GetValue( 0 ).ToString();
37 }
38 re = re + " hah " ;

当然还可以自己编写一些常用的调用例如:或者查询结果第一列的值等等。

大致上就是以上这几种形式了。

存储过程,Command直接执行,DataReader,DataAdapter,事务

由于笔者知识有限,如果还有其他形式请您补充上来

本文代码下载

目录
相关文章
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
|
2月前
|
存储 关系型数据库 分布式数据库
|
2月前
|
存储 关系型数据库 分布式数据库
|
16天前
|
存储 人工智能 关系型数据库
诚邀您参加《智启云存:AI时代数据库RDS存储新突破》线上闭门技术沙龙!
诚邀您参加6月11日(周三)14:00在线上举行的《智启云存:AI时代数据库RDS存储新突破》闭门活动。免费报名并有机会获得精美礼品,快来报名吧:https://hd.aliyun.com/form/6162
|
26天前
|
人工智能 关系型数据库 分布式数据库
媒体声音|从亚太到欧美,阿里云瑶池数据库凭何成为中企出海的技术底气?
在中企出海的时代浪潮中,瑶池数据库正凭借其技术创新、场景化解决方案、智能化能力、全球化布局,成为企业跨越挑战、构建全球竞争力的关键伙伴;同时也以硬核的技术实力证明了中国数据库的国际竞争力。
|
1月前
|
安全 Apache 数据库
【倒计时3天】NineData x Apache Doris x 阿里云联合举办数据库技术Meetup,5月24日深圳见!
5月24日,NineData联合Apache Doris与阿里云在深圳举办数据库技术Meetup。活动聚焦「数据实时分析」与「数据同步迁移」两大领域,邀请行业专家分享技术趋势、产品实践及解决方案,助力企业构建高效安全的数据管理体系。时间:14:00-17:30;地点:深圳新一代产业园2栋20楼会议室。线下名额有限(80人),速报名参与深度交流!
49 1
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:弹性并行查询(ePQ)篇
阿里云PolarDB云原生数据库在TPC-C基准测试中刷新了性能和性价比的世界纪录,达到每分钟20.55亿笔交易(tpmC),单位成本仅0.8元人民币。PolarDB采用云原生架构,支持数千节点横向扩展,具备弹性并行查询(ePQ)功能,可显著加速复杂查询。此外,PolarDB还推出了国产轻量版,以软件形式部署,满足多样化需求。
|
2月前
|
存储 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:高可用-无感切换篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,单位成本仅0.8元人民币。PolarDB通过VotingDisk实现秒级故障切换,RPO=0,提供高可用性。PolarDB还推出国产轻量版,兼具高性能与低成本,满足多样化需求。
|
2月前
|
存储 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:成本优化-软硬协同篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以超越原记录2.5倍的性能登顶排行榜,实现每分钟20.55亿笔交易,单位成本仅0.8元人民币,刷新性能与性价比双纪录。此外,还介绍了国产轻量版PolarDB MySQL的推出,满足市场对高性价比的需求。
|
2月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
111 0