/// <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));
}
改成如下。
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之类的才有效啊。
你这个是怎么传递参数的啊?
应该是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));
}
改成如下。
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之类的才有效啊。
你这个是怎么传递参数的啊?
应该是where col = @condition之类的才有效啊。
#5
我的意思是想把查询的条件拼了传进来 1=1 后直接用" and what=what ",但是昨天晚上弄了一下子,看来在SQLITE中,关键字后面如果要接参数的话,那么就直接接,要么就是用等号的形式才行,如果在句子中间突然出现的话,那是行不通的,哎,主要是考虑到这个数据库方便,不然的话还是转中大型的数据库好多了