最近用vc+sqlserver进行编程
用了以下的sql语句
sSQL.Format("INSERT INTO %s values(%s,'%s')",m_DataBaseName,sID,sName);
sID ,sName都是CString的
但是为什么sql语句中的sID是%s,而sName的是‘%s’,
我的数据库中sID是int类型的,
请问为什么得到的结果也是对的
难道还可以自动转换。。谢谢各位高手,在线等待

解决方案 »

  1.   

    跟踪一下吧,看看sSQL格式化后的值
      

  2.   

    %s是用力表明Format成员函数的字符串类型,跟数据库中的类型没关系。
    %s表明sID是字符串类型
    而写如数据库中如果是字符串,要加2个单引号,即'%s'就代表写如数据库是字符串。
      

  3.   

    sSQL.Format("INSERT INTO %s values(%s,'%s')",(LPCTSTR)m_DataBaseName,(LPCTSTR)sID,(LPCTSTR)sName);
      

  4.   

    断点跟踪下,sSQL.Format("INSERT INTO %s values(%s,'%s')",m_DataBaseName,sID,sName);
    根据 sSQL的值判断,是不是这句话的问题哟。我觉得应该是你那个sID的数据类型的问题吧
      

  5.   

    代码没问题啊 你在查询分析器里执行sql看看就知道了
    int型不需用 ' '  字符串型必需要 ' '
      

  6.   

    这是向库中加入新的东西
    我的库的第一个字段是%d的
    为什么value(%s)呢
      

  7.   

    简单的字符串问题,你用TRACE(sSQL)你就这道sSQL德内容了。
      

  8.   

    ....还没有看懂呀!假如: sID="100",sName="xxxxx"
    输出的SQL语句:"....values(100,'xxxxx')"这有什么不对吗?
      

  9.   

    INSERT INTO %s values(%s,'%s')",m_DataBaseName,sID,sName
    //Database name or Table name
      

  10.   

    也可以这样写:
    int sID=100;
    CString sName="xxxxx";
    .....sql.Format("..... values(%d,%s)",....,sID,sName);输出的SQL语句:"....values(100,'xxxxx')"
      

  11.   

    上面错了一点:
    sql.Format("..... values(%d,'%s')",....,sID,sName);
      

  12.   

    老大,你分分清。sSQL.Format("INSERT INTO %s values(%s,'%s')",m_DataBaseName,sID,sName);这句话只是产生一个字符串,结果类似“INSERT INTO table values( 5,'str')”。这一步和数据库无关,sSQL根本不知道这是个SQL语句。
    后来这个串被传给数据库去执行。数据库面对()里面的东西,一看5没被单引号包,说明是数值型字段,刚巧表的第一个字段是int型,对了,再看str被单引号包,说明是字串子段,一比表结构,巧了,表第二列也是字串型。没话说,只好执行了。理解了吗,多是合理的呀!
      

  13.   

    SQL中的字符串用单引号包含起来有什么问题吗?