日期:2014-05-19  浏览次数:20536 次

SQL占位符的问题~~~
using(SqlConnection   myConn   =   new   SqlConnection(ConnString))
                {
                        using(SqlCommand   myComm   =   new   SqlCommand( "SELECT   Count(*)   FROM   @TableName ",myConn))
                        {
                                myComm.CommandType   =   CommandType.Text;
                                myComm.Parameters.Add( "@TableName ",SqlDbType.VarChar,20);
                                myComm.Parameters[ "@TableName "].Value   =   "vsUser ";
                                myConn.Open();
                                Response.Write(myComm.ExecuteScalar());
                        }
                }
程序如上

抱错信息:必须声明变量   '@TableName '。

不知道错在哪了,请大虾指点~~~~

------解决方案--------------------
表名不能做为参数.
------解决方案--------------------
给你个元件:
System.Data.SqlClient.SqlCommand cm
#region int
/// <summary>
/// 添加int型的参数。
/// </summary>
/// <param name= "ParameterName "> 参数名称。比如 @UserName </param>
/// <param name= "ParameterValue "> 参数值 </param>
public void addNewParameter(string ParameterName,int ParameterValue)
{
cm.Parameters.Add(ParameterName,SqlDbType.Int,4); //添加存储过程的参数
cm.Parameters[ParameterName].Value=ParameterValue; //负值
//设置方向取默认值——输入
}
#endregion


执行:返回dataset
//存储过程部分
#region 运行存储过程返回记录(DataSet、DataTable、不返回记录集)

/// <summary>
/// 运行存储过程返回DataSet。DataSet里面可以是多个表(DateTable)
/// </summary>
/// <param name= "StoredProcedureName "> 存储过程名称 </param>
/// <returns> 返回DataSet </returns>
#region 函数实现 — — RunStoreDataSet
public DataSet RunStoreDataSet(string StoredProcedureName)
{
SetCommand(StoredProcedureName,2); //设置command
SqlDataAdapter da = new SqlDataAdapter(cm);
try
{
DataSet DS = new DataSet();
da.Fill(DS);
return DS;
}
catch(Exception ex)
{
SetErrorMsg( "RunStoreDataSet ",StoredProcedureName,ex.Message ); //处理错误
return null;
}
finally
{
da.Dispose();
}
}
#endregion


页面部分:
_dataAccessLayer为我声明元件类的对象.大体如此.我项目都是这样做的
_dataAccessLayer.addNewParameter( "@PageIndex ", iPageIndex);
_dataAccessLayer.addNewParameter( "@Pagesize ", 5);
dsTable = _dataAccessLayer.RunStoreDataSet( "getArticle ");