表users   ID   int
表Forum   userId  varchar  字数据库里表示(1,7)尝试过方法:
ALTER PROCEDURE [dbo].[BBS_UserNameById]
@Liang_Id int
ASSELECT * FROM Users WHERE Liang_Id in('+@Liang_Id+')
SELECT * FROM Users WHERE Liang_Id in(@Liang_Id)
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+')'SELECT * FROM Users WHERE CHARINDEX(','+LTRIM(Liang_Id)+',',','+@Liang_Id+',')>0
2天了,也没解决
如果写简单的sqlSELECT * FROM Users WHERE Liang_Id in('+userId+') 即可在存储过程怎么写也不对求DB高手!

解决方案 »

  1.   

    错误提示:将参数值从 String 转换到 Int32 失败。
      

  2.   

    ALTER PROCEDURE [dbo].[BBS_UserNameById]
    @Liang_Id VARCHAR(200)
    AS
    EXEC('
    SELECT * 
    FROM Users
    WHERE Liang_Id IN ('+@Liang_Id+')
    ')
    GO ALTER PROCEDURE [dbo].[BBS_UserNameById]
    @Liang_Id VARCHAR(200)
    AS
    SELECT * 
    FROM Users
    WHERE CHARINDEX(','+LTRIM(Liang_Id)+',',','+@Liang_Id+',')>0
    GO以上两个都可以。
      

  3.   

    我把源码贴出:
    public string GetNameByUserId(string ownerId)
            {
                string count = "";            SqlParameter[] spt ={
                
                   new SqlParameter("@Liang_Id",SqlDbType.Int)
                };            spt[0].Value = ownerId.ToString();            using (SqlDataReader reader = DBHelper.ExecuteReader(DBHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "BBS_UserNameById", spt))
                {
                    while (reader.Read())
                    {
                 
                        count += reader["Liang_RealName"].ToString() + "|  ";                }
                }
                return count;
    }db:public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
            {
                SqlCommand cmd = new SqlCommand();
                SqlConnection conn = new SqlConnection(connectionString);            try
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear();
                    return rdr;
                }
                catch
                {
                    conn.Close();
                    throw;
                }
            }直接throw  将参数值从 String 转换到 Int32 失败。如果数据库的 ownerId只存在一个数字如: 1 ,使用上面方法确实可以。但是如果数据库 ownerId是 如:1,7 的就抛错。是代码问题?还是SQL?
      

  4.   

    public string GetNameByUserId(string ownerId)
      {
      string count = "";  SqlParameter[] spt ={
        
      new SqlParameter("@Liang_Id",SqlDbType.Int)
      };  spt[0].Value = ownerId.ToString();有这么写的????new SqlParameter("@Liang_Id",SqlDbType.Int)这里是INT型,赋值个,1,7能不报错么??
    spt[0].Value = ownerId.ToString();[/这里也不能这样吧,这只取到了一个值
      

  5.   

    大哥,应该怎么换啊?SqlDbType.NVarChar
    也试过。什么都试完了
      

  6.   

    http://kb.cnblogs.com/a/1421489/你可以参考一下C#执行存储过程的