VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 655|回复: 7

关键字'xxx'附近有语法错误...快疯了...在线等

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-19 23:00:02 | 显示全部楼层 |阅读模式
各位大大,快帮帮小弟吧,对于数据库我是想把它写成一个DLL的形式:

CADODatabase::CADODatabase()
{
    ::CoInitialize(0);
    m_pConnect.CreateInstance(__uuidof(Connection));
    m_pConnect->ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI; \
        Persist Security Info=False;Initial Catalog=NetDisk;Data Source=127.0.0.1";
    m_pConnect->Open("", "", "", -1);
}

CADODatabase::~CADODatabase()
{
    m_pConnect->Close();
    m_pConnect.Release();
    ::CoUninitialize();
}

// Judge if the user is legal.
bool CADODatabase::JudgeLogIn(CString strUsername, CString strPassword, CString strTableName)
{
    if(FAILED(m_pRecordset.CreateInstance(__uuidof(Recordset))))
    {                                                              
        return false;
    }

    CString strQuery;
    strQuery.Format(_T("select * from %s where %s.Username = \'%s\' AND \
                       %s.Password = \'%s\'"), strTableName, strTableName,
                       strUsername, strTableName, strPassword);

    try
    {                                                           
        m_pRecordset->Open(_bstr_t(strQuery),
            _variant_t((IDispatch *)m_pConnect,true), adOpenStatic,
            adLockOptimistic, adCmdTable);

        m_pRecordset->MoveFirst();
        if (m_pRecordset->adoEOF == VARIANT_FALSE)
        {
            return true;
        }
        return false;
    }                                                              
    catch (_com_error &e)                                          
    {                                                              
        AfxMessageBox(e.Description());
    }  

    m_pRecordset->Close();
    m_pRecordset.Release();
    return false;
}

每每在m_pRecordset->Open处就会抛出异常,然后会得到错误描述:"在关键字'select'附近有语法错误",但是当我单步跟踪到这一步的时候,把strQuery的值COPY到查询分析器里面,然后执行却没错....无语了....请问是为什么呢?
回复

使用道具 举报

0

主题

55

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-4-28 02:45:01 | 显示全部楼层
\'%s\'看看这样的谢法是否合适?
回复

使用道具 举报

0

主题

10

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-4-28 21:30:02 | 显示全部楼层
strQuery.Format(_T("select * from %s where %s.Username = \'%s\' AND \
                       %s.Password = \'%s\'"), strTableName, strTableName,
                       strUsername, strTableName, strPassword);
->strQuery.Format(_T("select * from %s where %s.Username = '%s' AND
                       %s.Password = '%s'"), strTableName, strTableName,
                       strUsername, strTableName, strPassword);
试试看
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-4-29 11:00:02 | 显示全部楼层
这个错误一般是SQL语法错误。
把strQuery的值拷贝出来到数据库工具下直接执行,看看strQuery到底是什么
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-5-14 10:45:01 | 显示全部楼层
m_pRecordset->Open(_bstr_t(strQuery),
            _variant_t((IDispatch *)m_pConnect,true), adOpenStatic,
            adLockOptimistic, adCmdTable);
改成
m_pRecordset->Open(_variant_t( (CString) strQuery)
            _variant_t((IDispatch *)m_pConnect,true), adOpenStatic,
            adLockOptimistic, adCmdTable);
试试
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-6-1 06:45:01 | 显示全部楼层
我新写了一个类,不从MFC的CObject继承就没问题了,同样的代码,是不是因为不能从CObject继承的原因呢?~~
回复

使用道具 举报

0

主题

13

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-7-8 00:30:01 | 显示全部楼层
你的sql语句在format后的是错误的,要messageBox看一下,adCmdTable该为adCmdText,改为
strQuery.Format(_T("select * from %s where %s.Username = '%s' AND
                       %s.Password = '%s'"), strTableName, strTableName,
                       strUsername, strTableName, strPassword)试一下
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-8 09:45:01 | 显示全部楼层
Password是SQLServer的保留字,你换个字段名吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表