c#程序中使用"like“查询access数据库查询为空的问题,
今天,在开发的过程中发现了一个特别奇怪的问题:access中like查询时候,在Access数据库中执行,发现可以查询出结果,这是在数据库上执行,select * from KPProj where KpName like '*测试*',但是同样的语句在c#程序中却查询为空,这是什么情况呢?
这个问题真让人纠结,通过以前的开发经验,access中like需要用*号,但是sqlserver oracle数据库中要用标准的%,为什么此时就不行呢?经过搜索资料,最后发现是连接access驱动程序的问题,以前用的都是mdb,数据库是accdb,然后使win7 64位开发系统,由于我的程序中连Access用的是oledb驱动程序,所以在这里 不能用“*”,必须用“%”。如果用的是DAO访问Access数据库,则必须用“*”。
发现并不是遇到access就用*,所以要根据实际的驱动来确定;a1 = 0x01; //0000 0001
a2 = 0x00; //0000 0000
a3 = 0x03; //0000 0011
a4 = 0x02; //0000 0010
b1 = a1 ^ a2; //0000 0001
b2 = a1 ^ a3; //0000 0010
b3 = a1 ^ a4; //0000 0011
^异或运算符,位值相同为0,不同为1,见上示例.
//
简单实际问题举例:
======\=======\=======
======a=======b=======
上面是2条电路,2个开关分别为a和b,打开状态:\[1],关闭状态:/[0].
若同时打开或者关闭,两条电路均不通.
若a打开[1],b关闭[0],电路1通电
======\=======/=======
若a关闭[0],b打开[1],电路2通电
======/=======\=======
综上,电路在a,b状态相同时不通[0],在a,b不同时通电[1].
左移运算符(<<)
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
例:a = a << 2 将a的二进制位左移2位,右补0,
左移1位后a = a * 2;
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移运算符(>>)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
例如:a = a >> 2 将a的二进制位右移2位,
左补0 or 补1 得看被移数是正还是负。