拼接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
相关文档:
一、基础
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
......
String strServerName = "服务器名或IP";
String strUserID = "数据库用户名";
String strPSW= "数据库密码";
DataTable DBNameTable = new DataTable();
OleDbConnection Connection = new OleDbConnection(String.Format("Provider=SQLOLEDB;Data Source={0};User ID={1};PWD={2}", strServerName, strUserID, strPS ......
对于每一个数据库来讲,都需要至少一个事务日志文件。事务日志文件是整个数据库的血液,如果没有事务日志的话,那么将无法进行任何操作。
事务日志有什么东西?
事务日志记录着在相关数据库上的操作,同时还存储数据库恢复(recovery)的相关信息。
事务日志与数据库恢 ......
SQL分类:
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,简要介绍基础语句:
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database db ......
在进行数据库操作时,无非就是添加、删除、修改,这得设计到一些常用的SQL语句,如下:
SQL常用命令使用方法:
(1) 数据记录筛选:
sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 like %字段值% order by 字段名 [desc]"
sql="select top 10 * fro ......