ado-关于VS2005对SqlServer数据库操作的问题

问题描述

关于VS2005对SqlServer数据库操作的问题

对数据库Student进行查询时运行到msado.tli文件中的下面这个函数中的raw_Open时就崩溃掉。

 inline HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ) {
    HRESULT _hr = raw_Open(Source, ActiveConnection, CursorType, LockType, Options);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
}

调用代码:

        CString strsql = _T("select * from LoginInfo where Name='");
        strsql+=name;
        strsql+="' and Password='";
        strsql+=psw;
        strsql+="'";
        MessageBox(hwnd, strsql, _T("查询字符串"), MB_OK);
        CString strcolumn[6] = {_T("Name"),_T("Sex"),_T("Password"),_T("School"),_T("Major"),_T("Number")};
        int ncolumn = 6;
        CStringArray strvalue;
        theApp.m_dao.GetData(strsql,strcolumn,ncolumn,strvalue);
 BOOL CDao::GetData(CString strSql,CString *strQueryCloum,int nCloumNum,CStringArray& strDataValue)
{
    HRESULT het;
    //_bstr_t    字符串          _variant_t 多种数据类型集合 vt类型   ..value值                               //com
    _bstr_t bstrSql = strSql;               //执行sql
    _bstr_t bstrConnect = m_strConnect;     //连库串
    _bstr_t bstrQueryCloum;                 //列名

    Fields *fields;
    FieldPtr fieldPtr;

    CString strValue;
    _variant_t varBLOB;
    try
    {
        //1.打开表
        /*m_pRecordset->Open(查询SQL语句,连接串,打开方式,数据源更新时如何锁定结果集,以什么形式传入)
            打开方式:
            adOpenUnspecified = -1,  默认的方式打开
            adOpenForwardOnly = 0,    向前移动的游标打开
            adOpenKeyset = 1,         以键值打开
            adOpenDynamic = 2,        当你添加数据时别人也有可能往这个表添加数据,谁在前谁添加到前面(多人用数据库时)
            adOpenStatic = 3          别人也想往里面添加数据一直停留在打开时候

            锁定结果集方式:
            adLockReadOnly = 1,         只读的不能改变数据
            adLockPessimistic = 2,       (保守式锁定)逐个 – 编辑时立即锁定数据源的纪录
            adLockOptimistic = 3,        (开放式锁定)逐个 – 只在调用update方法时才锁定纪录
            adLockBatchOptimistic = 4     开方式 可以更新一批数据更新模式
            +       bstrConnect {"Driver={SQL Native Client};Server=192.168.1.92,2433;Uid=sa;Pwd=sa;Database=colin0716" (1)}    _bstr_t
            +       bstrSql {"select * from student" (1)}   _bstr_t

        */
        het = m_pRecordset->Open(bstrSql,bstrConnect,adOpenDynamic,adLockOptimistic,adCmdText);
        if (!SUCCEEDED(het))
        {
            AfxMessageBox(_T("打开表失败"));
            m_strErrorMsg = _T("查询表失败");
            return FALSE;
        }
        //循环结果
        while(!m_pRecordset->ADOEOF)
        {
                        //按行遍历
            for(int i=0;i<nCloumNum;i++)
            {
                bstrQueryCloum = strQueryCloum[i];
                fields = m_pRecordset->GetFields(); //fields 结果集中的字段集合。由于一行记录中可以包含多个字段,因此fileds属性是一个数组形式,数组中每一个元素代表一个字段

                fieldPtr = fields->GetItem(bstrQueryCloum);//field对象表示记录集中数据的某个单独的列。

                varBLOB = fieldPtr->GetValue();//获得当前列的值

                //long nSize =fieldPtr->ActualSize;

                //注意图片名称必须为图片流的前一个字段
                //strValue = DataToCStringType(varBLOB,nSize,strValue);
                strValue = DataToCStringType(varBLOB);
                strDataValue.Add(strValue);
                //varBLOB.Detach();
            }
            m_pRecordset->MoveNext();
        }

        m_pRecordset->Close();
    }
    catch(_com_error *e)
    {
        m_strErrorMsg = e->ErrorMessage();
        AfxMessageBox(e->ErrorMessage());
    }

    return TRUE;
}

那个_hr是总是返回E_FAIL,然后return的时候就崩溃掉。
这几天在写一个对数据库操作的项目,但是这几天被这个问题给卡住了,实在是找不到如何解决了,还请各位大神指点迷津。

解决方案

主要是你的数据库连接字符串,有两种类型,你选择你对应的

 //设置连接字符串
 //一个是数据库身份验证
_bstr_t strConnect = "Provider=SQLOLEDB.1;Data Source=ZHOUWEI\MYSQL;Initial Catalog=AMS;User ID=sa;PWD=123456";
 //下面是Windows身份验证方式
_bstr_t strConnect = "Provider=SQLOLEDB.1;Integrated Security = SSPI;Persist Security Info = FALSE;Data Source=WANGLIANG\SQLEXPRESS;Initial Catalog=ADODemo";

解决方案二:

求大神帮忙,小女子不胜感激。

解决方案三:

连接字符串有问题,或者sql有问题。

检查连接字符串,驱动、用户名、密码、数据库文件路径
sql字符串的拼接

时间: 2024-09-27 01:13:38

ado-关于VS2005对SqlServer数据库操作的问题的相关文章

数据库操作类实现(C#,SqlClient)

client|数据|数据库 使用ADO.NET时,每次数据库操作都要设置connection属性.建立connection.使用command.事务处理等,比较繁琐,有很多重复工作.能不能把这些繁琐的.常用的操作再封装一下,以更方便.安全地使用.下面这个类就是一种尝试: using System;using System.Data.SqlClient;using System.Text;using System.Data;using System.Collections;using System

VB语言使用ADO连接、操作SQLServer数据库教程_vb

几年前学过的VB几乎忘光了,这几天复习了下.VB连接ADO数据库并不是非常难. 连接第一步(要仔细看) 对于小白来讲,这里的教程最详细,连接ADO数据库第一步,要添加什么部件呢?全称是Microsoft ADO Data Control 6.0 (SP6) (OLEDB) 部件. 在Microsoft ADO Data Control 6.0 (SP6) (OLEDB)部件里有一个名叫:Adodc数据控件,要将它添加.在Adodc数据控件数据位置中找到ACCES. 控件引用的方法(值指的是姓名)

ado-VS2013C++ADO连接自带SQLServer本地数据库,多步OLEDB操作错误

问题描述 VS2013C++ADO连接自带SQLServer本地数据库,多步OLEDB操作错误 VS2013连接自带SQLServer本地数据库,工具-连接服务器或者连接数据库都能成功,但是在运行的时候ADO连接总是提示"多步OLEDB操作错误"(异常的描述信息). 连接数据库代码 void ADOConn::InitADOConn() { if (m_pConnection) { return; } // 初始化OLE/COM库环境 ::CoInitialize(NULL); try

SqlServer数据库长文本和二进制字段操作总结(54powerman原创)

SqlServer数据库长文本和二进制字段操作总结(54powerman原创)--创建测试用表 Create Table TestnText (RowID Int Identity(1,1) Primary Key,Content nText) --读写nText文本,一定要用在事物中 Begin Tran DECLARE @ptrval varbinary(16) Select @ptrval=TEXTPTR(content) From TestnText Where RowID=1 --TE

ADO.Net对oracle数据库操作的实例代码_实用技巧

首先要写连接字符串 可以在web.config里写上 复制代码 代码如下: <connectionStrings>     <add name="oracleson" connectionString="Data Source=dingsenorcl;Persist Security Info=True;User ID=ds;Password=ds;Unicode=True" providerName="System.Data.Oracl

在asp.net中操作sql-server数据库的一些小技巧

asp.net|server|技巧|数据|数据库 1.给数据库语句参数传递 向数据库操作语句传递参数可以通过存储过程实现,这里给出另外两种简便易捷的方法: 可以在C#中通过字符串操作将参数直接传入SQL语句变量中,例如: string s="Davolio"; string sql= "select * from employees where LastName="+"'"+s+"'" 相当于写入SQL语句: select *

Window Mobile RDA数据库操作解决方案研究

Window Mobile RDA数据库操作解决方案研究 一.RDA (Remote Data Access ) 远程数据访问     简单介绍:远程数据访问 (RDA) 使移动应用程序能够访问远程 SQL Server 数据库表中的数据,并将这些数据存储在本地 SQL Server Mobile 数据库表中.随后,该应用程序就可以读取和更新本地 SQL Server Mobile 数据库表.SQL Server Mobile 可以选择跟踪对本地表所做的所有更改.之后,应用程序可以将本地表中更改

教您使用XML封装数据库操作语句的实现

xml|封装|数据|数据库|语句 在项目开发的过程当中,项目组开发成员的编程风格差异和数据库操作语句SQL的灵活性给项目组带来了越来越多的操作和维护难度. 比如: 从user表中取出所有数据,有的人会写成"select * from user",有的人会写成"select all from user",虽然在操作中不会有任何的错误,但在其他人读程序的过程时就会产生不好的感觉. 如果这种程序差异在项目中的数量级很多,那么在开发的过程当中程序就会出现各种各样的风格,在维

批量替换sqlserver数据库挂马字段并防范sql注入攻击的代码

首先备份数据库,以防不必要的损失.而后对所有被挂马的小于8000字符的varchar字段执行 复制代码 代码如下: update 表名 set 字段名=replace(字段名,'<Script Src=http://c.n%75clear3.com/css/c.js></Script>','') 其中<Script Src=http://c.n%75clear3.com/css/c.js></Script>为挂马字段.执行后挂马字段被清除.但是有部分字段,比