string user_name;
user_name = "shanying";
com.CommandText = "insert into " + user_name + "_single_selected select top " + TextBox_count_multi.Text + " * from single_select where id not in (select id from " + user_name + "_single_selected) order by NEWID()";
问题肯定是出在user_name 身上,但我无法理解这个问题。因为如果把所有的user_name替换成"shanying",则执行结果正确。现在这样子出错无法执行。

解决方案 »

  1.   

    无法理解??你按照下面红色部分输出一下,然后拿到查询分析器里执行看看。string user_name;
    user_name = "shanying";
    string strSQL = "insert into " + user_name + "_single_selected select top " + TextBox_count_multi.Text + " * from single_select where id not in (select id from " + user_name + "_single_selected) order by NEWID()";
    Response.Write(strSQL); //检查一下表名是不是你期望的那个??
    com.CommandText = strSQL;
      

  2.   


    变量的值没进去?不应该啊你先赋给一个string类型变量。。输出一下看上去这个拼接好像是没错
      

  3.   


    表名是不能作为参数传递的,如果非要拼装SQL 语句的话,那就比较危险了,使用表名前可以过滤一下危险字符,或者是使用存储过程。下面提供一种拼凑字符串方法试试看。using System.Text;
     ...
    string user_name = "shanying";
    StringBuilder strSql = new StringBuilder(); 
    strSql.Append(" insert into @table"); 
    strSql.Append(" select top @top "); 
    strSql.Append("  * from single_select where id not in (select id from @table");
    strSql.Append(") order by NEWID()"); 
    SqlParameter[] parameters = { 
      new SqlParameter("@table", SqlDbType.VarChar,50),
      new SqlParameter("@top", SqlDbType.Int,4)
    };  
    parameters[0].Value = user_name+"_single_selected";
    parameters[1].Value = int.Parse(TextBox_count_multi.Text);SQLHelper.ExecuteNonQuery(strSql.ToString());
      

  4.   

    嗯,偶调试发现当时的user_name 是空的。偶声明的时候是在两个子方法外面,一个赋值,一个使用,使用的那地方变量是空值,偶在声明的时候加static就可以了。非常感谢各位大师相助。