SELECT语句的IN子句我使用ObjectDataSource
传呼数据和我有以下方法:如何提供ID的字符串,即使列是一个整数
public int GetNumberOfArticles(string employeeIds)
{
System.Data.DataTable dataTable;
System.Data.SqlClient.SqlDataAdapter dataAdapter;
System.Data.SqlClient.SqlCommand command;
int numberOfArticles = 0;
command = new System.Data.SqlClient.SqlCommand();
command.Connection = Classes.Database.SQLServer.SqlConnection;
command.CommandText = @"SELECT COUNT(*)
FROM
[Articles]
WHERE
[Articles].[EmployeeID] IN (@EmployeeIds)";
command.Parameters.AddWithValue("@EmployeeIds", employeeIds);
numberOfArticles = (int)command.ExecuteScalar();
return numberOfArticles;
}
EmployeeID为是一个整数,因此,我放在employeeIds
里的任何东西都会被转换成一个整数。但是,因为我使用的IN
关键字,很明显,我想用逗号分隔ID的列表,以取代employeeIds
:
1, 2, 3
但是,当我更换行:
command.Parameters.AddWithValue("@EmployeeIds", employeeIds);
喜欢的东西:
command.Parameters.AddWithValue("@EmployeeIds", "1, 2, 3");
我收到一个例外,因为我提供的字符串,而EmployeeIds
是一个整数。那么,我该如何去做呢?
谢谢。
编辑:
从答复,我明白,这必须手动完成,但其中包含此方法的类会由ObjectDataSource
自动创建。那么如何在运行时提供employeeIds
的值?
+1,但为什么你说这不是很好的做法?如果你的数据库支持UDF,这是一个很好的解决方案。对于更复杂的查询,此解决方案为您提供了准备执行的好处:http://technet.microsoft.com/en-us/library/ms131667.aspx – Joe 2009-04-12 17:22:29
这是不好的做法,因为它没有(也不能)缩放好。如果采取这种方法,则受限于数据类型的最大容量。如果使用动态SQL路由,则会失去可重用执行计划的优势,并假定允许使用动态SQL。 – 2009-04-12 17:35:19