知识库

通过SqlParameter操作数据库时应注意参数与语句的区别

2012-02-06

出错方法如下:

        /// <summary>
        /// 是否存在该记录
        /// </summary>
        public bool Exists(string strWhere)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select count(1) from Admin");
            strSql.Append(" where @strWhere ");
            SqlParameter[] parameters = {
                new SqlParameter("@strWhere", SqlDbType.VarChar,2000)};
            parameters[0].Value = strWhere;

            return DbHelperSQL.Exists(strSql.ToString(), parameters);
        }

  方法的作用是查找某个表中是否存在指定Where的记录。其中我把Where后面的内容全都当成一个SqlParameter。提示出错为:@strWhere附近发生错误!后来发现出错的地方是SqlParameter应该指代一个参数,而不是一段SQL。即:如果正常运行,@strWhere指代的可能是“字段1=值1 And 字段2 = 值2...”,这就是一段SQL代码,而不仅仅是一个参数。这段SQL代码中,参数只有“值1”、“值2”...所以如果要用SqlParameter指代SQL中的内容,必须指代值。而不能是一段SQL代码!
  修改后的上述方法应为(不需要用SqlParameter):

        /// <summary>
        /// 是否存在该记录
        /// </summary>
        public bool Exists(string strWhere)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select count(1) from Admin");
            if (strWhere != "")
                strSql.Append(" where " + strWhere);
            return DbHelperSQL.Exists(strSql.ToString());
        }

版权所有 © 2011 CopyRight 南宁珞德信息技术有限公司 代码:商务部 设计:新1站