请简描述ADO.NET访问数据库的步骤?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请简描述ADO.NET访问数据库的步骤?相关的知识,希望对你有一定的参考价值。
有六点
1、Connection,连接。打开数据通道。2、Command,命令。通过连接传给数据库执行。
3、DataReader,仅向前读取器。通过连接,读取查询结果。
4、Parameter,参数。有输入也有输出,输入参数和Command结合通过连接传给数据库,输出参数在执行后由数据库返回给参数。
5、DataAdapter,适配器。将数据库映射到程序,同步更新、删除、查询、添加。结合DataSet、DataTable、DataRow、DataColumn等对象使用。
6、Transaction,事物。多个命令组合执行,一条儿失败全部回滚,也可以自己设置还原点,手动控制回滚。 参考技术A 1创建一个数据库链路;
2请求一个记录集合;
3把记录集合暂存到DataSet;
4如果需要,返回第2步;(DataSet可以容纳多个数据集合)
5关闭数据库链路;
6在DataSet上作所需要的操作。 参考技术B 1.创建数据库连接字符创
2.导入命名空间System.data.sqlcen...
3.jia创建SQLCONNECTION 对象 把链接字符创 放进去
4. 打开数据库
5.声明SQLcommand对象 括号内放 执行命令的SQL语句 和connection对象
6command对象。方法执行相关命令 参考技术C 1.添加一个连接数据库的类DBHelper(主要添加连接语句string s = “连接语句”,及创建SqlConection con = new SqlConnection(s))
2.在操作的窗体事件中引用using system.Data.SqlClient;
创建sqlconnection 对象sql ;sql.open();打开数据库连接;创建sqlcommand对象 (sqlcommand cmd = new sqlcommand(sql操作语句,sql))
3.关闭数据库连接(sql.close(); 参考技术D 1.创建连接sqlconntion con = new sqlconntion ();
2.打开连接con.open();
3.指定命令:sqlcommand cmd = new SqlCommand(sql语句, con)
4.关闭连接
con.close();
在 ADO.Net C# 中执行并行数据库访问
【中文标题】在 ADO.Net C# 中执行并行数据库访问【英文标题】:Execute parallel database access in ADO.Net C# 【发布时间】:2016-09-09 14:06:42 【问题描述】:我正在开发 asp.net 应用程序以在仪表板上显示多个小部件。所以我发送了一个 ajax 调用来获取仪表板小部件所需的所有数据。
在服务器方法内部,有多个数据库调用通过存储过程从数据库中获取每个小部件的相关数据。方法内容如下;
List<DashboardItem> items = new List<DashboardItem>();
items.Add(GetUserList());
items.Add(GetNewsList());
items.Add(GetRecentlyViewedList());
items.Add(GetSentEmailsList());
.....
return items;
由于数据库中没有记录,这个过程似乎很慢。
我正在尝试使用异步数据库调用执行上述代码。似乎异步数据库操作可以改善这个过程。谁能帮我写异步数据库操作?或任何其他提高数据库方法调用性能的建议?
【问题讨论】:
dotnetcodr.com/2014/01/01/5-ways-to-start-a-task-in-net-c 在您的 GetXXX 上使用带有await
关键字的异步版本的数据库连接器,然后返回 DashboardItem[]
而不是返回 Task<DashboardItem[]>
,然后您可以创建一个 List<Task<DashboardItem[]>>
,添加返回的来自这些函数的任务,然后执行await Task.WaitAll(theListOfTasks)
,最后使用列表中存储的每个任务的.Result
。
不要尝试并行执行查询,只需将它们全部批处理。 NHibernate 允许批处理,EF 可以使用扩展批处理查询。只有当您必须在多个网卡上移动 很多(想想 GB)的数据数据时,并行执行才有帮助。否则,您只需引入更多的并发开销并使用比需要更多的连接
@Gusman 使用像 WaitAll
这样的阻塞方法是一个坏的想法。重点是减少阻塞。 await Task.WhenAll()
不会阻止。
@Aruna 不,这不会导致延迟,除非 SP没有写得很好。顺便说一句,原始 SQL 查询与存储过程之间没有性能差异。 确实 导致延迟的是建立多个连接和不必要的往返。您可以将所有呼叫批量处理,只需支付单次往返费用。
【参考方案1】:
您需要将您的入口点标记为Task
返回,然后您可以使用async
和await
关键字。此外,GetUserList
、GetNewsList
、GetRecentlyViewedList
和 GetSentEmailsList
方法也必须返回 Task
,这样你就可以一直使用 async
——(注意将 Async 添加到表明其性质的方法)。
public async Task GetDashboardItemsAsync()
var getUserTask = GetUserListAsync();
var getNewsTask = GetNewsListAsync();
var getRecentlyViewedTask = GetRecentlyViewedListAsync();
var getSentEmailsTask = GetSentEmailsListAsync();
await Task.WhenAll(getUserTask,
getNewsTask,
getRecentlyViewedTask,
getSentEmailsTask);
return new List<DashboardItem>
getUserTask.Result,
getNewsTask.Result,
getRecentlyViewedTask.Result,
getSentEmailsTask.Result,
;
将任务存储在变量中将允许您在它们全部实现后访问.Result
。 Task.WhenAll
方法采用 Task
数组,一旦所有这些都完成,它将继续。
使用这种方法,您基本上是在说启动每个任务以获取仪表板数据,一旦所有异步操作运行完成,然后继续将DashboardItem
的列表返回给调用者。
这主要是解决调用代码以及如何以并行方式处理多个任务。为了在 ADO.NET 级别启动提取操作,这应该是一个不同的问题。但是ADO.NET 和Entity Framework 上也有很多
async
API。
【讨论】:
以上是关于请简描述ADO.NET访问数据库的步骤?的主要内容,如果未能解决你的问题,请参考以下文章