拼接SQL造成的意想不到的后果
执行数据操作时,由于拼接SQL存在种种弊端,早就应该抛弃了,但在现实开发时,又由于种种原因,公司一直采用这种方式(UI层和逻辑层都有严格的过滤,倒也没出现过什么问题),但昨天开发时却出现了意想不到的问题,一个简单的语句会造成严重后果。简单的语句示例如下:
/// <summary>
/// 更新主键为2的记录的总钱数
/// </summary>
/// <param name="totalMoney">修改后的总钱数</param>
public void UpdateTotalMoney(int totalMoney)
{
int id = 2; //数据库表主键
int oldTotalMoney = 5000; //主键为2的记录原来的总钱数
int newTotalMoney = totalMoney; //主键为2的记录更改后的钱数
int totalMoneyChange = oldTotalMoney - newTotalMoney; //总钱数的变化量
string sql = string.Format("update Test1220 set totalMoney = {0},remainMoney = remainMoney-{1} where id = {2}", newTotalMoney, totalMoneyChange, id); //总钱数变化,剩余可支配钱数也跟着编号
SqlConnection con = new SqlConnection(sqlConnectString);
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
con.Close();
}
CREATE TABLE Test1220(
id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
totalMoney int NULL,
remainMoney int NULL
&n
相关文档:
oracle常用经典SQL查询
常用SQL查询:
1、查看表空间的名称及大小
select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
2、查看表空间物理文件的名称 ......
一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack ......
create or replace procedure c
(
v_deptno in emp.deptno%type,
v_max out emp.sal%type
)
as
begin
select max(sal+nvl(comm,0)) into v_max from emp where deptno=v_deptno;
end;
create or replace procedure cc
(
v_empno in emp.empno%type,
v_sal out emp.sal%type,
v_comm out emp.comm% ......
--语 句 功 能
--数据操作
SELECT --从数据库表中检索数据行和列
INSERT --向数据库表添加新数据行
DELETE --从数据库表中删除数据行
UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创建一个数据库表
DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表结构
CREATE VIEW --创建一个视图
DRO ......