Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用参数化查询时,是否可能看到在我的数据库上执行的查询?_.net_Sql Server - Fatal编程技术网

.net 使用参数化查询时,是否可能看到在我的数据库上执行的查询?

.net 使用参数化查询时,是否可能看到在我的数据库上执行的查询?,.net,sql-server,.net,Sql Server,源自这个问题: 在执行参数化查询时,是否有任何方法可以看到哪些查询被传递到我的数据库并被执行 我没有可用的SQL分析器,因此这不是一个选项。我希望有一种方法可以在VisualStudio中实现。可能吗?好吧,这真的不是魔法,也不是黑色艺术——在ADO.NET中这样的查询: string sqlStmt = "SELECT * FROM dbo.Customers WHERE country = @country"; using(SqlConnection _conn = new SqlConn

源自这个问题:

在执行参数化查询时,是否有任何方法可以看到哪些查询被传递到我的数据库并被执行


我没有可用的SQL分析器,因此这不是一个选项。我希望有一种方法可以在VisualStudio中实现。可能吗?

好吧,这真的不是魔法,也不是黑色艺术——在ADO.NET中这样的查询:

string sqlStmt = "SELECT * FROM dbo.Customers WHERE country = @country";

using(SqlConnection _conn = new SqlConnection("server=.;database=Northwind;integrated security=SSPI;"))
using(SqlCommand _cmd = new SqlCommand(sqlStmt, _conn))
{
    _cmd.Parameters.Add("@country", SqlDbType.VarChar, 100).Value = "Switzerland";

    DataTable results = new DataTable();

    using(SqlDataAdapter dap = new SqlDataAdapter(_cmd))
    {
        dap.Fill(results);
    }
}
将在SQL Server上转换为:

exec sp_executesql N'SELECT * FROM dbo.Customers WHERE country = @country',N'@country varchar(100)',@country='Switzerland'
基本上,ADO.NET/SQL Server不会像许多人认为的那样替换SQL语句字符串中的参数——它实际上是作为参数化查询以及参数及其值列表传递给SQL Server的

此SQL语句取自SQL探查器-我不知道您还可以如何查看该查询


为什么不能使用SQL分析器??我的意思是-它存在于SQL Server的每一个副本中,甚至对于使用免费SQL Server Express Edition的用户来说都是免费的…

好吧,这真的不是魔术,也不是黑色艺术-在ADO.NET中这样的查询:

string sqlStmt = "SELECT * FROM dbo.Customers WHERE country = @country";

using(SqlConnection _conn = new SqlConnection("server=.;database=Northwind;integrated security=SSPI;"))
using(SqlCommand _cmd = new SqlCommand(sqlStmt, _conn))
{
    _cmd.Parameters.Add("@country", SqlDbType.VarChar, 100).Value = "Switzerland";

    DataTable results = new DataTable();

    using(SqlDataAdapter dap = new SqlDataAdapter(_cmd))
    {
        dap.Fill(results);
    }
}
将在SQL Server上转换为:

exec sp_executesql N'SELECT * FROM dbo.Customers WHERE country = @country',N'@country varchar(100)',@country='Switzerland'
基本上,ADO.NET/SQL Server不会像许多人认为的那样替换SQL语句字符串中的参数——它实际上是作为参数化查询以及参数及其值列表传递给SQL Server的

此SQL语句取自SQL探查器-我不知道您还可以如何查看该查询


为什么不能使用SQL分析器??我的意思是-它存在于SQL Server的每一个副本中,甚至对于那些使用免费SQL Server Express版本的人来说都是免费的….

我不相信您可以在Visual Studio中访问此类内容,因为翻译将在ADO.NET库内部进行,但是上面发布的marc_的答案是正确的。您可以使用SQL Server Management Studio通过查看传入事务(如果有)来验证这一点。

我不相信您可以在Visual Studio中访问这类内容,因为转换将在ADO.NET库内部进行,但上面发布的marc_的答案是正确的。您可以使用SQL Server Management Studio通过查看传入事务(如果有)来验证这一点。

没有黑魔法!?这是最后一根稻草了。我要成为一名会计。没有黑魔法!?这是最后一根稻草了。我正在成为一名会计。事实上,甚至ADO.NET都不做任何翻译,而是作为参数化查询发送到SQL Server执行,不会用参数值替换参数!一个常见的误解…实际上-甚至ADO.NET也不做任何转换-它被发送到SQL Server作为参数化查询执行-没有用参数值替换参数!一个常见的误解。。。