在VC中向数据库提交SLQ语句
1、通过链接对象执行SQL语句
mfc没有提供对ado的操作类,它对ado的操作是通过智能指针来完成,要创建ado连接对象,需要像下面代码一样先定义一个连接对象的智能指针:
_ConnectionPtr pConnection;
然后调用智能指针的CreateInstance方法创建连接对象,要特别注意的是,CreateInstance是智能指针的对象,而不是连接对象的成员,所以需要使用.而不是->来调用:
pConnection->CreateInstance(“ADODB.Connection”);
连接对象建立以后,就可以调用连接对象的Open方法打开一个数据库的连接,第一个参数strConnet是类似于”Provider=SQLOLEDB; Server=db; Database=test; uid=sa; pwd=123;”的字符串,其他参数的类型和意义可以查看msdn:
pConnection->Open(strConnect, “”, “”, adModeUnknown);
成功与数据库建立连接以后就可以调用连接对象的Execute方法执行SQL语句了。Execute方法的第一个参数就是要执行的SQL语句;第二个参数是一个VARINT类型的引用,它用于保存执行该SQL语句以后对数据库影响的行数,VARINT是vc和COM进行数据交换的一种手段,可以通过此参数来判断语句是否执行成功;第三个参数是指明命令的类型,可以是adCmdText表示命令文本,也可以是adCmdStoredProc表示是一个存储过程。
pConnection->Execute(bstrInsert, &recordAffected, adCmdText);
2、通过命令对象执行SQL语句
ado的命令对象也是可以用于执行SQL指令的,事实上,当需要频繁的执行一条SQL指令,而这条SQL指令只是部分数据不同的话,使用命令对象会是较好的选择,当然要使用命令对象,首先必须建立应用程序与数据库的连接。其过程与上述使用连接对象执行SQL语句是类似的,在建立数据库连接后,要使用命令对象也需要先定义命令对象的实例,代码如下:
_CommandPtr pCmd;
pCmd.CreateInstance(“ADO.Command”);
然后需要为命令对象指定执行命令时要使用的数据库连接、命令内容及命令类型等信息,代码如下:
pCmd->ActiveConnection = m_pConnection;
pCmd->CommandText = bstrInsert;
pCmd->CommandType = adCmdText;
上述代码中m_pConnection为已经建立的数据库连接,在需要的时候还可以为命令对象设定对应的参数对象,以便可以参数化的执行一些数据库操作命令。执行代码如下:
pCmd->Execute(&vNULL, &vNULL, adCmdText);
Execute方法的第一个参数是命令执行完后所影响的行数,第二个参数为命令参数对象,第三个参数为命令的类型。这里的vNULL表示该参数为空,如果要在ado中表达这样的含义,则必须像一下代码定义变量vNULL才可以,否则在执行Execute时会抛出异常。
_variant_t vNULL;
vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;