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列表。。。