.net 中 使用参数进行模糊查询的问题

ma_ta 2007-06-14 09:41:43
1、在程序中使用如下的查询时总是查不到内容,搜索了一下网上说只能用存储过程才可以解决,请问有没有办法在程序中直接解决?
select * from user where name like '%@name%'
2、我在sqlserver数据库中一直用自增ID做主键,但是看到有些人用uniqueident做主键,还有人不用自增ID,而是每次新增记录自己计算最大ID+1做主键,请问这几种方法有什么优缺点?
...全文
813 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
SassyBoy 2007-06-15
  • 打赏
  • 举报
回复
declare @sql=varchar(max)
set @name=传入参数
set @sql= 'select * from [user] where name like''%' + @name + '%'''
exec(@sql)
iew_study 2007-06-15
  • 打赏
  • 举报
回复
1. string sqlStr = "select * from [User] where name like '%'+@name"
就可以了,这样还可以防止注入攻击
ma_ta 2007-06-15
  • 打赏
  • 举报
回复
话说人一定要靠自己,总算解决了
看大家都说这问题简单的一塌糊涂,我也就不献丑了,哈哈,揭帖
ma_ta 2007-06-15
  • 打赏
  • 举报
回复
TO:zxkid
试过没?不行..
TO:hk8082()
语法错误....
TO:MicroDeviser
想了好一阵,还是不明白你再说什么...
ma_ta 2007-06-14
  • 打赏
  • 举报
回复
TO:amandag
不行
TO:wxndiablo
这是存储过程的方式
刺客 2007-06-14
  • 打赏
  • 举报
回复
declare @sqlstr varchar(8000)
set @sqlstr = 'select * from user where name like''%' + @name + '%'''
exec(@sqlstr)
amandag 2007-06-14
  • 打赏
  • 举报
回复
2、我在sqlserver数据库中一直用自增ID做主键,但是看到有些人用uniqueident做主键,还有人不用自增ID,而是每次新增记录自己计算最大ID+1做主键,请问这几种方法有什么优缺点?
=========================================
习惯自增ID
amandag 2007-06-14
  • 打赏
  • 举报
回复
select * from [user]
============================================
user 数据库关键字
danjiewu 2007-06-14
  • 打赏
  • 举报
回复
在@name赋值的时候加上%行不行?
ma_ta 2007-06-14
  • 打赏
  • 举报
回复
TO:jerryfos:
sorry,应该是
select * from user where name like %@name%
写成这样,提示: '@name' 附近有语法错误。
ma_ta 2007-06-14
  • 打赏
  • 举报
回复
TO:vrhero:
@name = '%...%'
select * from user where name like @name
这个不行,查不到

TO:jerryfos:
select * from user where name like %@name%
写成这样,提示: '@BRANDNAME' 附近有语法错误。
ma_ta 2007-06-14
  • 打赏
  • 举报
回复
select * from user where name like '%"+name+"%'"
类似上边这样的组合还需要额外做防注入处理,所以统一用了参数
wzq6511 2007-06-14
  • 打赏
  • 举报
回复
@name是存储过程的参数,可以在程序中定义一个string name,通过组装string,"select * from user where name like '%"+name+"%'"
jerryfos 2007-06-14
  • 打赏
  • 举报
回复
1,'%@name%' 替换成 %@name% 参数两别不用加单引号“'”
2,第一种方设计好处就是省了数据库设计的工夫。
第二种方法“UNIQUEIDENTIFIER 128 位 用于远程过程调用的唯一识别数字。”适合做访问唯一性标志,但字段比较占空间。
第三种方法可以有效利用“ID”的数字资源,让该ID字段的索引效率更高,代价就是要自己写触发器或其它方法来实现,就是费工夫
sibyle 2007-06-14
  • 打赏
  • 举报
回复
uniqueidentifier 数据类型的主要优点是保证newid函数生成的值在全球是唯一的
如果全球唯一性并不是必须的,或者需要一个连续递增的键,可以考虑使用identity属性
uniqueidentifier 数值类型有以下缺点:
值长且难懂,用户不便于记忆和使用(键入值的时候都比较容易出错)
这些值是随机的,而且他们不能接受任何使它们对用户变得有意义的模式
没有任何方式可以决定生成 uniqueidentifier 值的顺序,它们不适用于那些依赖递增的键值东东
虽然uniqueidentifier 数据类型具有16个字节,比4字节的证书相比要大一些,所以uniqueidentifier键建立的索引可能会比int键实现的索引要慢


对比 int 和 uniqueidentifier
uniqueidentifier的主要优点除了保证值在全球唯一以外,
还有它的值产生在插入之前,而非插入之后才能取得。

在uniqueidentifier 建索引,索引太宽
uniqueidentifier 不是单调递增的,经常会产生页拆分


http://tuolang2006.spaces.live.com/   这里看看。。。
vrhero 2007-06-14
  • 打赏
  • 举报
回复
唯一标识是字符型的,比较慢
---------------
纠正一下,uniqueidentifier可不是字符型,而是 16 字节 128 位整数!
vrhero 2007-06-14
  • 打赏
  • 举报
回复
1、
@name = '%...%'
select * from user where name like @name

2.
自增列是int型,快速方便。适用于一般系统...
Guid适用于大型分布式系统...
最大ID+1只适用于简单库结构的某些对象关系极简单的系统...
whslovexyp 2007-06-14
  • 打赏
  • 举报
回复
自增的,当中有空缺了不会自动补,而是最大的加一。
认为加一还要算
唯一标识是字符型的,比较慢
看你用的环境了
lovingkiss 2007-06-14
  • 打赏
  • 举报
回复
select * from user where name like '%张三%'

没有问题的,直接查询返回数据表就是了。
lovingkiss 2007-06-14
  • 打赏
  • 举报
回复
2、使用自增量方便,不用管理。使用自定义灵活。使用uniqueident安全,但是数据库查看起来比较费劲,实际上你可以随意选择,没有什么太特别的优缺点。
加载更多回复(7)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧