C# 编制的报表-在清单中

C# 编制的报表-在清单中,c#,sql,prepared-statement,C#,Sql,Prepared Statement,可能重复: 如何将以下查询转换为准备好的语句(如果可能…) 我可以做一些类似于: OdbcCommand cmd = sqlConn.CreateCommand(); cmd.CommandText = "select UNIQUE_ID users where E_MAIL in (?)"; 如果是这样,我应该向cmd parameters集合添加什么参数,如果是varchar,我怎么能要求无限大小?Hmm,很好,它不;我不认为你能那样做 我的做法是重写查询,对一组选项使用联接,然后从拆分

可能重复:

如何将以下查询转换为准备好的语句(如果可能…)

我可以做一些类似于:

OdbcCommand cmd = sqlConn.CreateCommand();
cmd.CommandText = "select UNIQUE_ID users where E_MAIL in (?)";

如果是这样,我应该向cmd parameters集合添加什么参数,如果是varchar,我怎么能要求无限大小?

Hmm,很好,它不;我不认为你能那样做

我的做法是重写查询,对一组选项使用联接,然后从拆分函数生成该组选项

要查看拆分视图,请参见:

然后SP将看起来像这样

Create proc GetUsersByEmail
 @EmailList varchar(8000)
as

  select unique_id
  from users u
       inner join split(@emaillist,',') e on u.e_mail = e.data
实际上,您也可以直接传递sql,而无需在DB中创建SP,但我会选择SP


向GJ问候

嗯,好的,不;我不认为你能那样做

我的做法是重写查询,对一组选项使用联接,然后从拆分函数生成该组选项

要查看拆分视图,请参见:

然后SP将看起来像这样

Create proc GetUsersByEmail
 @EmailList varchar(8000)
as

  select unique_id
  from users u
       inner join split(@emaillist,',') e on u.e_mail = e.data
实际上,您也可以直接传递sql,而无需在DB中创建SP,但我会选择SP


如果您使用odbc命令,则表明您使用的是SQL Server以外的数据库。SQL Server 2008引入了一种可能是解决方案的解决方案

假设您正在使用的数据库不支持此功能,那么gjvdkamp建议的拆分函数就是一个选项

如果您的数据库支持动态SQL(SQL Server为此提供了),您也可以考虑使用它。

最后一个选项,您可能需要考虑(<强>不太优雅< <强> >),以允许有限数量的电子邮件地址,并允许每个参数通过自己的参数传递。然后在where子句中使用它们,如下所示

where E_MAIL in (@Address1, @Address2, @Address3)

如果您正在使用odbc命令,则表明您正在使用SQL Server以外的数据库。SQL Server 2008引入了一种可能是解决方案的解决方案

假设您正在使用的数据库不支持此功能,那么gjvdkamp建议的拆分函数就是一个选项

如果您的数据库支持动态SQL(SQL Server为此提供了),您也可以考虑使用它。

最后一个选项,您可能需要考虑(<强>不太优雅< <强> >),以允许有限数量的电子邮件地址,并允许每个参数通过自己的参数传递。然后在where子句中使用它们,如下所示

where E_MAIL in (@Address1, @Address2, @Address3)

连接的成本比简单的“in-list”要高…检查过了,这是真的。这种方法会起作用,但建议的线程包含更好的解决方案。连接的成本比简单的“in-list”要高……这是正确的。这种方法会起作用,但建议的线程包含更好的解决方案。感谢您非常详细的回复!然而,最后一种方法确实不优雅,因为我动态构建了我的allemails列表…感谢您非常详细的回复!然而,最后一种方法确实不优雅,因为我动态地构建了allemails列表。。。