select * from myuser where name='1' and pwd='Q'
如果数据库中有name="1" pwd="q" 而没有name="1" pwd="Q"的记录时,照样能查出结果来。
程序的相关代码如下,请各位大侠帮忙看看,先谢过了,^_^。
查询的代码:
m_sql="select * from myuser where name='1' and pwd='Q'";
CMyADO myado;
int count=myado.Select(m_sql);
CString num;
num.Format("有%d条查询结果",count);
MessageBox(num);
CMyADO类的相关定义如下:
class CMyADO
{
public:
bool CloseRecord();
_RecordsetPtr m_pRecordset; //指向RecordSet的指针
int m_nResultRow; //查询结果行数
int m_nResultCol; //查询结果列数
CStringArray m_strarr; //存放查询结果数组
CString errormessage; //ADO错误信息
CMyADO();
virtual ~CMyADO();
int Select(CString Sql); //执行SQL查询语句,结果放在数组pData中
int Excute(CString Sql); //执行无返回值得SQL语句
};
CMyADO::CMyADO()
{
m_pRecordset.CreateInstance("ADODB.Recordset"); //创建Recordset对象的实例:
m_nResultRow=0; //
m_nResultCol=0; //记录集行数和列数
}
extern CADOApp theApp; //要用到在CMyApp中与数据库建立的连接
int CMyADO::Select(CString Sql) //执行SQL查询语句,结果放在数组pData中
{
try
{
m_pRecordset->Open(_bstr_t(Sql),_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
// int count=m_pRecordset->RecordCount; //得到查询结果的行数
m_nResultCol = m_pRecordset->Fields->GetCount();//得到查询结果的列数
m_nResultRow = m_pRecordset->GetRecordCount(); //得到查询结果的行数
if (m_nResultRow==0)
{
return 0;
}
else
m_pRecordset->MoveFirst();
while (!m_pRecordset->adoEOF)
{
int col;
for (col=0;col<m_nResultCol;col++)
{
_variant_t temp;
_variant_t vcol=(long)col;
temp=m_pRecordset->GetCollect(vcol);
//将temp中的数据类型转换为string,temp中的数据类型放在vt中,可以通过
//temp.vt和VT_BOOL,VT_I2等比较获得。具体类型查MSDN中的VARTYPE
if (temp.vt==VT_NULL)
{
CString stemp="";
m_strarr.Add(stemp);
}
else
{
temp.ChangeType(VT_BSTR); //将temp中的数据转换为VT_BSTR(string类型)
CString strtemp=(LPCTSTR)(_bstr_t)temp;
// AfxMessageBox(strtemp);
m_strarr.Add(strtemp);
}
}
m_pRecordset->MoveNext();
}
return m_nResultRow; //返回记录集的行数
}
catch(_com_error e)///捕捉异常
{
errormessage.Format("%s%s","打开结果集失败:",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
return 0;
}
}
18 个解决方案
#1
select出来之后在程序代码里再比一次,呵呵,笨办法.
#2
呵呵,这个想法有创意,不过我觉得应该可以有方法直接区分大小写吧。
#3
关注这个问题,1楼的办法也行,但是比较繁琐,会增加程序处理时间!
#4
看看这个不知道有没有帮助,也是在代码里实现的
http://hi.baidu.com/cyico/blog/item/aaa1bb0a5d27191c94ca6b66.html
http://hi.baidu.com/cyico/blog/item/aaa1bb0a5d27191c94ca6b66.html
#5
这个好像问过很多次了,SQL是不区分大小写的,最好还是自己取出来,然后再过滤大小写
#6
Microsoft Jet(Access MDB) 引擎好像做不到这个,但 SQL Server 引擎可以做到区分大小写。
#7
解决方法:
1、换成 SQL Server 数据库;
2、自己检测;
3、明确表明密码区域不区分大小写。
说明:绿色表明为最佳(偷懒)的方法!
1、换成 SQL Server 数据库;
2、自己检测;
3、明确表明密码区域不区分大小写。
说明:绿色表明为最佳(偷懒)的方法!
#8
存ASC码。。
#9
一般数据库里不存储用户的原始密码吧,是不是可以对密码处理一下然后取出来比较一下,是不是可以不同程度上减少一下问题的产生呢?用户名也可以同样处理一下,不知道可不可以
#10
大侠可以具体说说怎么做吗?3Q~~
#11
就是把字母等用它对应的char值等来存值,这样大小写的ascii码值是不一样的,查询的时候查这个码值,就可以区分了
#12
明白,呵呵,有没有什么设置可以直接区分大小写呢?
#13
直接区分,Access中不能支持,只能自己取出来了,然后再自己过滤
#14
SELECT case_sensitive_data FROM table_name WHERE StrComp(case_sensitive_data, “some_data”,0)=0
#15
看懂了,蒋大哥的方法不错!
select * from myuser where name='1' and (StrComp(pwd,'Q',0)=0)
StrComp 的用法见下面页面:
http://office.microsoft.com/zh-cn/access/HA012289142052.aspx
select * from myuser where name='1' and (StrComp(pwd,'Q',0)=0)
StrComp 的用法见下面页面:
http://office.microsoft.com/zh-cn/access/HA012289142052.aspx
#16
老大出现在地表!!
#17
up
#18
顶一个,正好遇到这个问题
#1
select出来之后在程序代码里再比一次,呵呵,笨办法.
#2
呵呵,这个想法有创意,不过我觉得应该可以有方法直接区分大小写吧。
#3
关注这个问题,1楼的办法也行,但是比较繁琐,会增加程序处理时间!
#4
看看这个不知道有没有帮助,也是在代码里实现的
http://hi.baidu.com/cyico/blog/item/aaa1bb0a5d27191c94ca6b66.html
http://hi.baidu.com/cyico/blog/item/aaa1bb0a5d27191c94ca6b66.html
#5
这个好像问过很多次了,SQL是不区分大小写的,最好还是自己取出来,然后再过滤大小写
#6
Microsoft Jet(Access MDB) 引擎好像做不到这个,但 SQL Server 引擎可以做到区分大小写。
#7
解决方法:
1、换成 SQL Server 数据库;
2、自己检测;
3、明确表明密码区域不区分大小写。
说明:绿色表明为最佳(偷懒)的方法!
1、换成 SQL Server 数据库;
2、自己检测;
3、明确表明密码区域不区分大小写。
说明:绿色表明为最佳(偷懒)的方法!
#8
存ASC码。。
#9
一般数据库里不存储用户的原始密码吧,是不是可以对密码处理一下然后取出来比较一下,是不是可以不同程度上减少一下问题的产生呢?用户名也可以同样处理一下,不知道可不可以
#10
大侠可以具体说说怎么做吗?3Q~~
#11
就是把字母等用它对应的char值等来存值,这样大小写的ascii码值是不一样的,查询的时候查这个码值,就可以区分了
#12
明白,呵呵,有没有什么设置可以直接区分大小写呢?
#13
直接区分,Access中不能支持,只能自己取出来了,然后再自己过滤
#14
SELECT case_sensitive_data FROM table_name WHERE StrComp(case_sensitive_data, “some_data”,0)=0
#15
看懂了,蒋大哥的方法不错!
select * from myuser where name='1' and (StrComp(pwd,'Q',0)=0)
StrComp 的用法见下面页面:
http://office.microsoft.com/zh-cn/access/HA012289142052.aspx
select * from myuser where name='1' and (StrComp(pwd,'Q',0)=0)
StrComp 的用法见下面页面:
http://office.microsoft.com/zh-cn/access/HA012289142052.aspx
#16
老大出现在地表!!
#17
up
#18
顶一个,正好遇到这个问题