今天烦了一天了。怎么弄也不行UserNameById为存储过程 一直抛错。SELECT * FROM Users WHERE Liang_Id in('+@Liang_Id+')
SELECT * FROM Users WHERE Liang_Id in(@Liang_Id)什么方法都尝试完了。难道是其他错?
public string GetNameByUserId(string ownerId)
        {
            string count = "";            int ow = int.Parse(ownerId.ToString());            SqlParameter[] spt ={
            
               new SqlParameter("@Liang_Id",ow)
            };
            using (SqlDataReader reader = DBHelper.ExecuteReader(DBHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "UserNameById", spt))
            {
                while (reader.Read())
                {
                    //版块那边使用
                    count += reader["Liang_RealName"].ToString() + "|  ";                }
            }
            return count;

非存储过程 可以正确显示
 public string GetNameByUserId(string ownerId)
        {            string count = "";                  string sql = "SELECT * FROM Users WHERE Liang_Id in ("+ownerId+")";
            using (SqlDataReader reader = DB.GetReader(sql))
            {
                while (reader.Read())
                {
                    //版块那边使用
                    count += reader["Liang_RealName"].ToString() + "|  ";                }
            }
            return count;
        }请问 在存储过程应该怎么转换?才不会报错?谢谢!

解决方案 »

  1.   

    存储过程中作字符串, EXEC运行动态SQL.
      

  2.   

    declare @sql varchar(200)
    set @sql='SELECT * FROM Users WHERE Liang_Id where 1=1' 
    set @Sql=@sql+' and Liang_Id  in ('+@Liang_Id+')'
      

  3.   

    大哥,不行啊。还是 将参数值从 String 转换到 Int32 失败。ALTER PROCEDURE [dbo].[BBS_UserNameById]
    @Liang_Id int
    AS
    DECLARE @sqlstr nvarchar(200)
    set @sqlstr = 'SELECT * FROM Users WHERE Liang_Id 1=1'set @sqlstr = @sqlstr+' AND Liang_Id in ('+@Liang_Id+')'string count = "";            SqlParameter[] spt ={
                
                   new SqlParameter("@Liang_Id",SqlDbType.Int)
                };            spt[0].Value = ownerId;            using (SqlDataReader reader = DBHelper.ExecuteReader(DBHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "BBS_UserNameById", spt))
                {
                    while (reader.Read())
                    {
                        //版块那边使用
                        count += reader["Liang_RealName"].ToString() + "|  ";                }
                }
                return count;
    怎么转也不可以哦!求教!~
      

  4.   

    得到的 ownerId 是 1,7如果转成 Convert.ToInt32(ownerId); 直接报错 输入字符串的格式不正确。 不转又提示 将参数值从 String 转换到 Int32 失败。我真郁闷!~
      

  5.   

    SELECT * FROM Users WHERE CHARINDEX(','+LTRIM(Liang_Id)+',',','+@Liang_Id+',')>0','这是你连接@Liang_Id时所用的分隔符比如是 @Liang_Id='1,2,3'
      

  6.   

    SELECT * FROM Users WHERE Liang_Id in('+@Liang_Id+')
    SELECT * FROM Users WHERE Liang_Id in(@Liang_Id)
    这个问题我以前也想过,后来知道了在IN,NOT IN中最好不要包含SQLSERVER变量,要用变量最好用比较运算符
    打个比方in(1,2,3)
    declare @liangid int
    set @liangid=1,2,3么
    in('aaa','bbb',ccc')
    declare @liangid varchar(50)
    set @liangid='aaa,bbb,ccc'行吗
    又不允许@liangid='aaa','bbb','ccc'语法错误