Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
C# 仅使用字符串创建参数化查询_C#_Sql Server - Fatal编程技术网

C# 仅使用字符串创建参数化查询

C# 仅使用字符串创建参数化查询,c#,sql-server,C#,Sql Server,好的,为了避免评论和问题,让我解释一下,我是在一个非常旧的应用程序中工作的。长话短说,我需要创建一个带有参数的查询,并需要将其作为字符串传递到数据访问方法中 我只能向这个方法传递一个字符串,这个方法将把字符串当作一个查询来处理,并尝试对sql-server-2008-r2数据库执行它 他们的方法接受发送给它的任何字符串,并使用它在数据库中执行EXECstring 因此,我试图找出如何传入一个字符串,该字符串不受sql注入的影响,并且仍然可以执行 例如,我可以传入以下字符串: "SELECT *

好的,为了避免评论和问题,让我解释一下,我是在一个非常旧的应用程序中工作的。长话短说,我需要创建一个带有参数的查询,并需要将其作为字符串传递到数据访问方法中

我只能向这个方法传递一个字符串,这个方法将把字符串当作一个查询来处理,并尝试对sql-server-2008-r2数据库执行它

他们的方法接受发送给它的任何字符串,并使用它在数据库中执行EXECstring

因此,我试图找出如何传入一个字符串,该字符串不受sql注入的影响,并且仍然可以执行

例如,我可以传入以下字符串:

"SELECT * FROM myTable WHERE myColumn = '12345' "
使用具有只读访问权限的SSM,我可以做到:

EXECUTE sp_executesql 
    N'SELECT * FROM myTable where myColum = @myColumn', 
    N'@myColumn nvarchar(250)', 
    @myColumn = N'12345'
在C语言中,我想要避免的是:

string query = string.format("SELECT * FROM myTable WHERE myColumn = '{0}', var);
再一次,回到SSMS,我在玩弄如何让它工作:

EXEC(????)
那么,如何创建一个字符串,将其传递到这个将在SQLExec内部工作的古老方法中呢

我试过这个:

EXEC ('EXECUTE sp_executesql N''SELECT *  myTable where myColumn = @myColumn', N'@myColumn nvarchar(250)'', @myColumn = N''12345''')  
但这让我明白:

附近的语法不正确

我甚至不知道这是否有效,如果有效,我不知道我的语法错误在哪里

编辑:

同样,在SSMS中,此查询也起作用:

EXEC('SELECT * FROM myTable WHERE MyColumn = '12345')
我只是不知道如何将所有这些结合起来,以便在我所能做的只是传入单个字符串时,它可以与参数一起工作

再次编辑:

我发现我问这个问题做得不好,所以让我再试一次:

只能将字符串传递给方法。该字符串将在数据库中按如下方式执行:

EXEC(yourString).  
我的问题是:是否有可能传递的不仅仅是实际的查询:

"select * from myTable where myColumn = '12345' "
但是。。。是否可以传入一个如下所示的字符串:

"EXECUTE sp_executesql N'SELECT * from myTable WHERE myColumn = @myColumn', N'@myColumn nvarchar(250)', @myColumn = N'12345'"
为了记录在案,我试过了,但没有成功

试着这样做:

EXEC ('EXECUTE sp_executesql N''SELECT * FROM mytable where myColumn = @myColumn'', N''@myColumn nvarchar(250)'', @myColumn = N''12345''    ')

看来你没有把所有的东西都换掉

EXEC ( 'EXECUTE sp_executesql N''SELECT * FROM myTable where myColum = @myColumn'', N''@myColumn nvarchar(250)'',  @myColumn = N''12345''')

也许这能帮你

DECLARE @sqlCommand nvarchar(1000)
DECLARE @myColumn nvarchar(75)
DECLARE @executeCommand nvarchar(1000)
SET @myColumn = '12345'
SET @sqlCommand = 'SELECT * from myTable where myColumn = @myColumn'
SET @executeCommand = 'EXECUTE sp_executesql N' + char(39) + @sqlCommand + char(39) + ', N''@myColumn nvarchar(75)'', @myColumn = '+ CHAR(39) + @myColumn + CHAR(39)
EXEC(@executeCommand)

请注意,CHAR39 concating是因为变量@myColumn被声明为varchar。

好的,我感谢您的帮助。但是,我的问题是:在C中,我只能将字符串传递给数据访问方法。这并不能帮助我构建一个可以发送到数据访问方法中的字符串。很抱歉,我理解的问题是错误的,现在我已经更正了答案:-那么,如果用户输入123'而不是12345,会发生什么;落桌学生;选择'45