日期:2014-05-17  浏览次数:20708 次

VC,_ConnectionPtr,SQL Server数据库建表问题
BOOL CConnectDataBase::CreateTable(CString _tableName)
{
if(IsHaveTable(_tableName))
{
AfxMessageBox("数据库表已经存在!");
return FALSE;
}
try
{
_variant_t _value;
CString strSQL = _T("CREATE TABLE ");
strSQL += _tableName;
strSQL += _T("(PJType NCHAR(20),PJLevel NCHAR(20),PJDscribe NTEXT,Pic IMAGE)");
//建表
//m_pConnect->Execute("CREATE TABLE _tableName(PJType NCHAR(20),PJLevel NCHAR(20),PJDscribe NTEXT,Pic IMAGE)", &_value, adCmdText);
m_pConnect->Execute((_bstr_t)strSQL, &_value, adCmdText);
}
catch (_com_error& e)
{
AfxMessageBox(e.Description());
}
}

CConnectDataBase* m_pConect;
m_pConnect->CreateTable("DL/T 773-2001");

该程序出现‘/’附近,'-'附近有语法错误,究其原因,动态建表,表名不能使用/, ,-等符号,为什么利用数据库管理工具建表然后重命名可以使用这些符号,请问各位,在VC中用_ConnectionPtr建表,怎样做才能使其能够使用/,空格,-等符号呢?

------解决方案--------------------
用中括号包住
------解决方案--------------------
m_pConnect->CreateTable("DL/T 773-2001");

你的这句,改成这样,试试:

m_pConnect->CreateTable("[DL/T 773-2001]");
------解决方案--------------------

_variant_t _value;
        CString strSQL = _T("CREATE TABLE ");
        strSQL += _tableName;
        strSQL += _T("(PJType NCHAR(20),PJLevel NCHAR(20),PJDscribe NTEXT,Pic IMAGE)");

改成

_variant_t _value;
        CString strSQL = _T("CREATE TABLE [");
        strSQL += _tableName;
        strSQL += _T("](PJType NCHAR(20),PJLevel NCHAR(20),PJDscribe NTEXT,Pic IMAGE)");

试试