SQL语句execute后的参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语句execute后的参数相关的知识,希望对你有一定的参考价值。
2.CONN.EXECUTE(SQL,RowsAffected,C)参数含义:SQL的值可以是SQL语句、表名、存储过程名,也可以是数据提供者所能接受的任意字符串。为了提高性能,最好为C参数指定合适的值可选参数RowsAffected将返回INSERT、UPDATE或DELETE查询执行以后所影响的数目。这些查询会返回一个关闭的Recordset对象。一个SELECT查询将返回RowsAffected值为-1并且返回带有一行或多行内容的打开的Recordset 参考技术A conn.open
mysql,conn,A,B
参数A为设定游标的类型,其取值为:
0
仅向前游标,只能向前浏览记录,不支持分页、Recordset、BookMark
1
键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark
2
动态游标功能最强,但耗资源也最多。用户对记录说做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览。
3
静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动
参数B为记录集的锁定类型,其取值为:
1
锁定类型,默认的,只读,不能作任何修改
2
当编辑时立即锁定记录,最安全的方式
3
只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等
4
当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的
使用 .NET SqlCommand 运行带有 EXECUTE AS 语句的 t-sql 存储过程
【中文标题】使用 .NET SqlCommand 运行带有 EXECUTE AS 语句的 t-sql 存储过程【英文标题】:Running a t-sql stored procedure with EXECUTE AS statement with .NET SqlCommand 【发布时间】:2017-06-30 06:51:57 【问题描述】:我有一个使用 System.Data.SqlCommand 执行参数化 MS SQL Server 存储过程的 .NET Web 服务应用程序。应用程序从用户输入中接收存储过程的名称及其参数。
同样是部署在 Windows AD 域中的应用程序,它能够在 SSPI 身份验证的帮助下获取远程用户的名称。
using (var con = new SqlConnection(connectionString))
using (var cmd = new SqlCommand(procedureName, con))
cmd.CommandType = CommandType.StoredProcedure;
foreach (var pair in pairs.AllKeys)
cmd.Parameters.Add(new SqlParameter(pair, pairs[pair]));
con.Open();
using (var reader = cmd.ExecuteReader())
// processing results
现在我想用 EXECUTE AS 语句执行一个存储过程。
use [db]
go
execute as user = 'domain\user' --execute as RemoteUser
exec [db].[stored_procdure] @param1=value1
这可以吗?如何将 EXECUTE AS 添加到 SqlCommand?
我不想求助于易于注入 sql 的代码并从用户收到的字符串构建 sql 请求。
【问题讨论】:
在创建sql连接对象的时候为什么不在连接字符串中指定用户名,这样就以那个用户的身份执行了 使用Windows Authentication
连接到SQL Server 而不是sa
用户。
我无法在连接字符串中指定用户凭据,因为我没有它们。我只有一个“域\用户”格式的用户名。没有密码。
如果你使用windows认证那为什么需要以用户身份执行?
那么为什么您需要“执行为”您的命令已经以使用连接的用户身份执行?!?
【参考方案1】:
前段时间和我的一个同事解决了这个问题。
要实现所请求的行为,execute as
语句应在单独的前面的 SqlCommand 中运行,同时在同一个 SqlConnection 中。
reader
关闭后,仍然在同一个 SqlConnection 中,需要另一个单独的 SqlCommand - revert
- 来切换回上下文。
【讨论】:
【参考方案2】:我遇到了类似的问题,我能够以用户身份执行,但恢复不起作用。通过遵循prot的回答,我能够修复它。所以对于任何有类似问题的人来说,这就是代码的样子
SqlCommand cmd = new SqlCommand("EXECUTE AS USER = 'domain\\user';");
OSSDBDataContext dc = new OSSDBDataContext();
cmd.Connection = dc.Connection as SqlConnection;
cmd.Connection.Open();
cmd.ExecuteNonQuery();
//Execute stored procedure code goes here
SqlCommand cmd2 = new SqlCommand("REVERT;");
cmd2.Connection = dc.Connection as SqlConnection;
cmd2.ExecuteNonQuery();
【讨论】:
以上是关于SQL语句execute后的参数的主要内容,如果未能解决你的问题,请参考以下文章