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 ");