C# 实体框架中.SqlQuery()方法的params参数中有什么?

C# 实体框架中.SqlQuery()方法的params参数中有什么?,c#,sql,entity-framework,C#,Sql,Entity Framework,该方法为查询获取一个字符串,为参数获取一个Object[]数组,可能是为了避免SQL注入 然而,在地球上没有任何地方记录了您应该将什么放入对象数组中 还有另外一个问题,问的是完全相同的问题,但公认的答案不起作用: 我尝试了我能想到的所有形式的参数替换,它们都抛出了一个异常。有什么想法吗 希望它能简单到: SqlQuery(“从@table”、“用户”中选择*) 编辑:以下是我尝试过的一些事情(异常是一个SqlException): 这使得必须声明表变量“@p0”。您的查询语法没有问题,或者您是如

该方法为查询获取一个字符串,为参数获取一个
Object[]
数组,可能是为了避免SQL注入

然而,在地球上没有任何地方记录了您应该将什么放入对象数组中

还有另外一个问题,问的是完全相同的问题,但公认的答案不起作用:

我尝试了我能想到的所有形式的参数替换,它们都抛出了一个异常。有什么想法吗

希望它能简单到:

SqlQuery(“从@table”、“用户”中选择*)

编辑:以下是我尝试过的一些事情(异常是一个
SqlException
):


这使得
必须声明表变量“@p0”。

您的查询语法没有问题,或者您是如何创建和传递
SqlParameter
对象的

您的问题是,您试图使用变量作为表名,但您不能这样做(请参阅:),因此您需要在查询中手动“模板化”表名:

差不多

var result = context.Users.SqlQuery<T>(
"SELECT * FROM " + tableName + " WHERE @p0 = '@p1'", 
   new SqlParameter("p0", propertyName), 
   new SqlParameter("p1", searchQuery));
var result=context.Users.SqlQuery(
“从“+tableName+”中选择*,其中@p0='@p1'”,
新的SqlParameter(“p0”,propertyName),
新的SqlParameter(“p1”,searchQuery));

您从示例中得到了什么例外情况?另外,我甚至不知道可以在查询中使用参数作为表名……SqlQuery对数据库执行直接SQL。根据我尝试的方法,我会遇到各种各样的错误。我将提出一些问题。简单参考:不能将变量用作表名:。您需要这样的内容:
var result=context.Users.SqlQuery(“从“+tableName+”中选择*,其中@p0='@p1'”,新的SqlParameter(“p0”,propertyName),新的SqlParameter(“p1”,searchQuery))所以当我说“我甚至不知道可以使用参数作为表名”时,我想我不应该因为不知道而感到尴尬……问题解决了,谢谢。我已经准备好冲出去砸东西了。我希望这能在将来节省一些糟糕的sap。@SLC确保清除来自用户输入的表名,以避免sql注入。例如,请参见此处:
var result = context.Users.SqlQuery<T>("SELECT * FROM {0} WHERE {1} = '{2}'", tableName, propertyName, searchQuery);
var result = context.Users.SqlQuery<T>(
"SELECT * FROM " + tableName + " WHERE @p0 = '@p1'", 
   new SqlParameter("p0", propertyName), 
   new SqlParameter("p1", searchQuery));