tst*_*ter 30 .net c# sql-server ado.net data-access
我正在构建一个应用程序,我想将多个查询批处理到一个数据库的往返.例如,假设单个页面需要显示用户列表,组列表和权限列表.
所以我存储了procs(或者只是简单的sql命令,比如"select*from Users"),我想执行其中的三个.但是,为了填充这一页,我必须进行3次往返.
现在我可以编写单个存储过程("getUsersTeamsAndPermissions")或执行单个SQL命令"select*from Users; exec getTeams; select*from Permissions".
但我想知道是否有更好的方法来指定在一次往返中进行3次操作.好处包括更容易进行单元测试,并允许数据库引擎将查询并行化.
我正在使用C#3.5和SQL Server 2008.
Dar*_*rov 37
像这样的东西.这个例子可能不是很好,因为它没有正确处理对象,但你明白了.这是一个清理版本:
using (var connection = new SqlConnection(ConnectionString))
using (var command = connection.CreateCommand())
{
connection.Open();
command.CommandText = "select id from test1; select id from test2";
using (var reader = command.ExecuteReader())
{
do
{
while (reader.Read())
{
Console.WriteLine(reader.GetInt32(0));
}
Console.WriteLine("--next command--");
} while (reader.NextResult());
}
}
Run Code Online (Sandbox Code Playgroud)
您提到的单个多部分命令和存储过程选项是两个选项.您无法以这样的方式执行它们,即它们在数据库上"并行化".但是,这两个选项都会导致单次往返,所以你在那里很好.没有办法更有效地发送它们.在sql server 2005及更高版本中,完全参数化的多部分命令非常有效.
编辑:添加有关为什么填写单个呼叫的信息.
虽然你不想太在意减少通话,但可能有正当理由.
| 归档时间: |
|
| 查看次数: |
45911 次 |
| 最近记录: |