SQLITE 参数传不进去是什么原因?

时间:2021-03-16 04:31:03
很奇怪的一个问题,有SELECT COUNT(*) 的语句中总是报错,请高手帮助解决


/// <summary>
        /// 根据条件NewsType连接所有关系表查询所得记录数
        /// </summary>
        /// <param name="conditon">条件</param>
        /// <returns>记录数</returns>
        public int GetAllNewsTypeJoinAllByConditionCount(string conditon)
        {

            string sql = "select count(*) from NewsType   where 1=1 @condition ";
            SQLiteParameter[] param = new SQLiteParameter[] { 
                new SQLiteParameter("@condition",conditon)
            };

            return Convert.ToInt32(sqlhelp.execScalar(sql,param));
        }


调用的方法如下:
 public string execScalar(string sql, SQLiteParameter[] param)
        {
            string result = "";
            cmd = new SQLiteCommand(sql, getCon());
            cmd.Parameters.AddRange(param);
          
            result = cmd.ExecuteScalar().ToString();
            return result;
        }




结果错误是:
SQLite error
near "@condition": syntax error
我一直在调试,代码感觉一直都不有错,就是到最后调用的这个方法中参数的值也是正确的,但是一执行  result = cmd.ExecuteScalar().ToString();的时候就出现上面的错误,好像是语句并不会把参数的值赋给语句.请问是什么原因,是不是语句就不是这么写的?

5 个解决方案

#1


其它数据库也不会允许这样的参数的。

改成如下。
        public int GetAllNewsTypeJoinAllByConditionCount(string conditon)
        {

            string sql = "select count(*) from NewsType   where 1=1  "+ conditon;
            
            return Convert.ToInt32(sqlhelp.execScalar(sql));
        }

#2


哦,是不是只有COUNT(*)不支持这种参数的传递方法?其它的方法都是可以的

#3


我试了insert 我也是用@的参数形式,能成功,今天搞这个COUNT(*)搞死我了,

#4


where 1=1 @condition 
你这个是怎么传递参数的啊?
应该是where col = @condition之类的才有效啊。

#5


我的意思是想把查询的条件拼了传进来 1=1 后直接用" and what=what ",但是昨天晚上弄了一下子,看来在SQLITE中,关键字后面如果要接参数的话,那么就直接接,要么就是用等号的形式才行,如果在句子中间突然出现的话,那是行不通的,哎,主要是考虑到这个数据库方便,不然的话还是转中大型的数据库好多了

#1


其它数据库也不会允许这样的参数的。

改成如下。
        public int GetAllNewsTypeJoinAllByConditionCount(string conditon)
        {

            string sql = "select count(*) from NewsType   where 1=1  "+ conditon;
            
            return Convert.ToInt32(sqlhelp.execScalar(sql));
        }

#2


哦,是不是只有COUNT(*)不支持这种参数的传递方法?其它的方法都是可以的

#3


我试了insert 我也是用@的参数形式,能成功,今天搞这个COUNT(*)搞死我了,

#4


where 1=1 @condition 
你这个是怎么传递参数的啊?
应该是where col = @condition之类的才有效啊。

#5


我的意思是想把查询的条件拼了传进来 1=1 后直接用" and what=what ",但是昨天晚上弄了一下子,看来在SQLITE中,关键字后面如果要接参数的话,那么就直接接,要么就是用等号的形式才行,如果在句子中间突然出现的话,那是行不通的,哎,主要是考虑到这个数据库方便,不然的话还是转中大型的数据库好多了