贪睡的猫 发表于 2009-12-13 16:05:12

SqlDataAdapter为什么不能使用in查询呢.

string sqlStatement = "select * from users where userid IN (@userid)";

        DataTable table = new DataTable();
        SqlDataAdapter adapter = new SqlDataAdapter(sqlStatement, connectionString);

        我如果设置一个能检索出来.(如下)
        adapter.SelectCommand.Parameters.Add(new SqlParameter("@userid", "55"));
        
        设置多人提示我没有数据.
        adapter.SelectCommand.Parameters.Add(new SqlParameter("@userid", "55,66"));
        下面也不行
        adapter.SelectCommand.Parameters.Add(new SqlParameter("@userid", "'55','66'"));


    不知道是什么原因,是不是不能用in 呀!

crura 发表于 2010-8-9 11:01:10

字段名,表名,数据库名之类作为变量时,必须用动态SQL
        string connectionString = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;
        string sqlStatement = "exec(' select * from roleinfo where roleid IN ('+@id+') ')";
        DataTable table = new DataTable();
        SqlConnection connection = new SqlConnection(connectionString);
        SqlDataAdapter adapter = new SqlDataAdapter();
        SqlParameter param = new SqlParameter();
        param.ParameterName = "@id";
        param.Value = "1,2";
        param.DbType = DbType.String;
        SqlCommand command = new SqlCommand(sqlStatement, connection);
        command.CommandType = CommandType.Text;
        command.Parameters.Add(param);
        adapter.SelectCommand = command;
        DataSet ds = new DataSet();
        adapter.Fill(ds);

Tin_Yat/mg 发表于 2011-11-15 10:12:11

貌似楼上说的好像也会有点问题哦,你这样的话只能用作查询'1,2’这个字符串,如果要想查询1或者2需要将string sqlStatement = "exec(' select * from roleinfo where roleid IN ('+@id+') ')";
中的@id改成''''+REPLACE(@id,',',''',''')+''''
页: [1]
查看完整版本: SqlDataAdapter为什么不能使用in查询呢.