在数据库中我想删除一些数据,我调用的方法如下: public bool DeleteCustomer(string CustomerIDs)
{
string sql = "delete from Customer where CustomerID in (@CustomerIDs)";
SQLiteParameter[] param = new SQLiteParameter[] {
new SQLiteParameter("@CustomerIDs",CustomerIDs )
};
return sqlhelp.execSql(sql, param);
}调用到的方法如下: public bool execSql(string sql, SQLiteParameter[] param)
{
int i;
cmd = new SQLiteCommand(sql, getCon());
cmd.Parameters.AddRange(param);
i = cmd.ExecuteNonQuery();
closeCon();
return (i > 0 ? true : false);
}其中getCon是获取连接, closeCon是关闭连接,我一路调试发现一个很诡异的问题,因为我的主键是用INT自增值,当我传入一个值,如ID值为"7"的时候就正常,数据库中数据能正常的删除,但是如果我传入的值是"7,8"的时候就操作失败,找了半天也没有找出是什么原因,当然上面的举例中并不包含两侧的引号,困挠了半天了,实在是找不出什么原因来,值一直都是正常的传的,但就是在 i = cmd.ExecuteNonQuery();这句的时候好返回的值是0,查看了cmd的一些相关东西,一切都是正常的,包含它的参数,请问一下各位遇到过这种问题吗,是不是我哪里写错了?
{
string sql = "delete from Customer where CustomerID in (@CustomerIDs)";
SQLiteParameter[] param = new SQLiteParameter[] {
new SQLiteParameter("@CustomerIDs",CustomerIDs )
};
return sqlhelp.execSql(sql, param);
}调用到的方法如下: public bool execSql(string sql, SQLiteParameter[] param)
{
int i;
cmd = new SQLiteCommand(sql, getCon());
cmd.Parameters.AddRange(param);
i = cmd.ExecuteNonQuery();
closeCon();
return (i > 0 ? true : false);
}其中getCon是获取连接, closeCon是关闭连接,我一路调试发现一个很诡异的问题,因为我的主键是用INT自增值,当我传入一个值,如ID值为"7"的时候就正常,数据库中数据能正常的删除,但是如果我传入的值是"7,8"的时候就操作失败,找了半天也没有找出是什么原因,当然上面的举例中并不包含两侧的引号,困挠了半天了,实在是找不出什么原因来,值一直都是正常的传的,但就是在 i = cmd.ExecuteNonQuery();这句的时候好返回的值是0,查看了cmd的一些相关东西,一切都是正常的,包含它的参数,请问一下各位遇到过这种问题吗,是不是我哪里写错了?
解决方案 »
- 这个是什么错误,怎么解决?
- 我OUT了,原来现在很多都是用CMS的
- Asp.Net 给JS方法传值时值自动改变?!! 跪求高人指点
- 关于服务器方面的问题!
- asp.net实现的web聊天软件,欢迎测试,批评有分
- 地址栏只显示IP地址(所有的页面)
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置
- 执行了两句sql,填充了两个表,显示字段数据的时候前台要怎么板定?
- 各位帮帮忙,这个分很容易得哦!
- 上传图片功能出现错误
- IDisposable释放数据库SqlConnection问题
- 寻求高手指点JS
SqlParameter param = new SqlParameter();
param.ParameterName = "@param";
param.Value = "1,2,3,4,5";
command.Parameters.Add(param);
string sql = "delete from Customer where CustomerID in ("+CustomerIDs+")";sql语句的问题!
如果一定要采用这种方式,就使用”人生如梦“的方法
此解正确
如果直接封装参数
如下:
string sql = "delete from Customer where CustomerID in (‘7,8’)";
这样的语句
看你的 where CustomerID in (@CustomerIDs) ,这个参数就是一个常量。SQL根本不支持这类拼字符串语法。对于SQLite,需要首先使用 create temp table 创建临时表,其中只有一个常数字段,然后把数据分别 insert到临时表,然后用你的Customer表跟临时表进行inner join操作,来删除Customer。