解决方案 »
- C#在开发过程中什么情况下考虑使用反射?
- 求一正则,不匹配admin的所有字符串
- 删除相同数据并且记录个数
- TimeSpan.FromDays的作用!!
- C#如何实现Delphi里的SendMessage(Application.MainForm.ClientHandle, WM_MDIGETACTIVE, 0, 0);
- 如何用C#製作ISO 文件
- 方法的事务处理或一个集作为参数传给存储过程
- 求ASP.NET 技术内幕 c#版本的,或其他的比较经典的c#版asp.net 书
- picturebox的问题.请看!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 很奇怪:dataGrid数据更改后,关闭窗口出错
- C#读取Dll文件报错。
- 【入门级问题】C#基础,界面,按钮
你改成:
StringBuilder strSql = new StringBuilder();
strSql.Append("update Table set ");
strSql.Append("Pid=@Pid,");
strSql.Append("Start=@Start,");
strSql.Append("CEnd=@CEnd");
strSql.Append(" where id=@id ");
OleDbParameter[] parameters = {
new OleDbParameter("@id", OleDbType.Integer,4),
new OleDbParameter("@Pid", OleDbType.Integer,4),
new OleDbParameter("@Start", OleDbType.Date),
new OleDbParameter("@CEnd", OleDbType.Date)};
parameters[0].Value = model.Pid;
parameters[1].Value = model.Start;
parameters[2].Value = model.CEnd;
parameters[3].Value = model.id;
也许你觉得不可思议,但实际上微软在MSDN中就这么说了,我以前也遇到过这个问题。
在ADO.NET中经常需要跟各种数据库打交道,在不实用存储过程的情况下,使用参数化SQL语句一定程度上可以防止SQL注入,同时对一些较难赋值的字段(如在SQL Server中Image字段,在Oracle中Clob字段等)使用参数化SQL语句很容易就能赋值,所以本人经常在ADO.NET中使用参数化SQL语句,近几年来陆续跟SQL Server/Oracle/ MySQL/Access打交道,积累了一些心得,现在整理出来供大家参考。
通过上面的例子,基本上可以总结出一个规律:在参数化SQL中参数名的格式跟其在存储过程中生命存储过程参数一致,例如在Oracle中存储过程参数一律以”:”开头,在MS SQL Server中存储过程参数一律以”@”开头,而在MySQL中存储过程(MySQL从5.0以后版本支持存储过程)参数一律以“?”开头,所以在参数化SQL语句中参数名有些不一样(记得在csdn上有朋友提到过不知道为什么MySQL中参数化SQL语句中要用“?”而不是和SQL Server一样使用”@”),如果那位朋友看过本文,我想他就会解开这个疑虑了。
不是的话,那个 0 岂不就是 SELECT @@IDENTITY 的后果了~
米有用过命名参数,只能静态分析一下,但楼上辛苦应该没有白费~