关于在c#中嵌入sql代码的问题
2012-06-26 09:12
295 查看
在很多时候会遇到需要的在c#或者其他高级程序设计语言中嵌入sql代码,可能是生成一个String查询字段,然后添加对应的Parameter。我遇到的问题是在查询逻辑中用到了分段的查询语句。下面贴一段 错误的代码。
我的tb_User表有3个字段 id,username,password。
目测貌似没什么问题,在有些时候比如加入下面的条件分支也不会有问题。但是在发生sql+之后总是出错。
最后花了不少时间才发现时因为后面添加的查询字段没有合适的空格。
其实在以前编写比如“SELECT * FROM TB WHERE name='”.prename."aaa".suffixname."'";这样的语句是也可能会有同样的问题,只是因为拼接写的比较近容易发现。
如果离得更远,比如垮函数的拼接可能更不易察觉。
总结sql语句拼接需谨慎
String sql = @"SELECT * FROM tb_User WHERE 1=1"; SqlCommand cmd=new SqlCommand(); if (src.id != 0) { sql += "AND id=@id"; SqlParameter paramID = new SqlParameter("@id", SqlDbType.Int, 4); paramID.Value = src.id; cmd.Parameters.Add(paramID); }
if (null != src.username) { sql += "AND username=@username"; SqlParameter paramUsername= new SqlParameter("@username",SqlDbType.NVarChar,64); paramUsername.Value = src.username; cmd.Parameters.Add(paramUsername); } if (null != src.password) { sql += "AND password=@password"; SqlParameter paramPassword=new SqlParameter("@password",SqlDbType.VarChar,64); paramPassword.Value = src.password; cmd.Parameters.Add(paramPassword); }
我的tb_User表有3个字段 id,username,password。
目测貌似没什么问题,在有些时候比如加入下面的条件分支也不会有问题。但是在发生sql+之后总是出错。
最后花了不少时间才发现时因为后面添加的查询字段没有合适的空格。
其实在以前编写比如“SELECT * FROM TB WHERE name='”.prename."aaa".suffixname."'";这样的语句是也可能会有同样的问题,只是因为拼接写的比较近容易发现。
如果离得更远,比如垮函数的拼接可能更不易察觉。
总结sql语句拼接需谨慎
相关文章推荐
- 关于c#代码Convert.ToChar(null);出现异常,而object obj = null; Convert.ToChar(obj);//返回'\0'空字符问题详解
- 关于ASP.NET页面嵌入代码的高亮显示的问题。
- 关于在c#中创建用户控件后,winform应用程序在调用中无法通过点击用户控件的子控件为其自动添加事件代码的问题
- 关于VS2005中C#代码用F12转到定义时,总是显示从元数据的问题
- 关于VS2005中C#代码用F12转到定义时,总是显示从元数据的问题题
- 关于极光推送C#服务端代码的一些问题
- 关于c#sql中返回的dt问题探究
- 做项目时遇到的几个关于C#和SQL的细节问题(二)
- 关于VS2005中C#代码用F12转到定义时,总是显示从元数据的问题
- 关于在前台页面插入C#代码的问题,导致页面不完全显示
- 关于不能调试C#代码的问题
- 关于C#SqlParameter传参进行模糊查询遇到的问题!
- 关于VS2005中C#代码用F12转到定义时,总是显示从元数据的问题?
- 做项目时遇到的几个关于C#和SQL的细节问题(一)
- 关于无法全然下载CyanogenMod代码的问题
- 关于SQL的安全问题(ftp.exe、cmd.exe的解决方法)
- 关于Eclipse中代码显示显色的设置问题
- 关于从后台向前台传递html代码在前台无法显示的问题
- [C#]ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码,兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法
- c# 中几个关于string问题