MFC ADO 连接数据库问题

happyliuliming 2015-11-10 09:25:23

初学者,按照书上例子,连接公司数据库
总是提示 “无效指针”

导入ADO库
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")
2、用导入的动态库的指针操作数据库.
打开数据库连接
_ConnectionPtr m_pConn; // 数据库连接指针
// 创建Conneciton对象
m_pConn.CreateInstance(_T("ADODB.Connection"));
用ConnectionPtr 的open方法m_pConn->Open(_bstr_t(m_sConn),
_T(""), _T(""), lOptions));
m_sConn为你连接数据库的信息,你应该按照你的要求打开数据库


void CADOSampleDlg::OnBnClickedButton1() //连接数据库
{
// TODO: 在此添加控件通知处理程序代码
HRESULT hr; //定义操作结果句柄
try
{
hr=m_pConnection.CreateInstance(_T("ADODB.Connection"));
if (SUCCEEDED(hr))
//hr=m_pConnection->Open(_T("provider=SQLOLEDB;Data Source=10.85.58.15;Initial catalog=predb;Integrated Security=SSPI;"),_T("pics"),_T("pics#2011"),adConnectUnspecified);
hr=m_pConnection->Open(_T("provider=SQLOLEDB;Data Source=10.85.58.15;Initial catalog=predb;Integrated Security=SSPI"),_T("pics"),_T("pics#2011"),adModeUnknown);
if (m_pConnection->State)
WriteLog(_T("数据库连接成功!"));
else
WriteLog(_T("数据库连接失败!"));
}
catch(_com_error e)
{
CString log;
log.Format(_T("连接数据库失败 %s"),e.ErrorMessage());
WriteLog(log);
}
}
...全文
399 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwfgdlc 2015-11-11
  • 打赏
  • 举报
回复
::CoInitialize(NULL);
没有初始化COM环境
赵4老师 2015-11-11
  • 打赏
  • 举报
回复
在64位Windows下: 64位exe和dll在目录c:\windows\system32目录下; 32位exe和dll在目录c:\windows\syswow64目录下; 所以要注意: 在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。 且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll 在win64位系统下设置32位程序使用的数据库别名要用c:\windows\syswow64\cliconfg.exe 在win64位系统下设置32位程序使用的系统DSN要用c:\windows\syswow64\odbcad32.exe
华美乐章 2015-11-11
  • 打赏
  • 举报
回复
你初始化COM库了吗? CoInitialize(NULL); or 在XXXXXApp::InitInstance()调用AfxOleInit();
happyliuliming 2015-11-10
  • 打赏
  • 举报
回复



hr=m_pConnection.CreateInstance(_T("ADODB.Connection"));
		if (SUCCEEDED(hr))
//发现问题在这里就Fail 了 
ysuwood 2015-11-10
  • 打赏
  • 举报
回复

 hr=m_pConnection->Open(_T("provider=SQLOLEDB;Data Source=10.85.58.15;Initial catalog=predb;Integrated Security=SSPI"),_T("pics"),_T("pics#2011"),adModeUnknown);
 
改成这个试试:
hr=m_pConnection->Open(_T("provider=SQLOLEDB;Data Source=10.85.58.15;Initial catalog=predb;"),_T("pics"),_T("pics#2011"),adModeUnknown);

happyliuliming 2015-11-10
  • 打赏
  • 举报
回复
同样的环境,我用C#的代码可以连接成功

private void button1_Click(object sender, EventArgs e)
        {
            conn = new SqlConnection("server=10.85.58.15;database=predb;uid=pics;pwd=pics#2011");
            SqlDataAdapter sda = new SqlDataAdapter("select * from ts where id='" + 
                textBox1.Text.Trim() + "'",conn);
            ds = new DataSet();
            sda.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
            dataGridView1.RowHeadersVisible = false;
            //使用For循环设定控件的列宽
            for (int i = 0; i < dataGridView1.ColumnCount; i++)
            {
                dataGridView1.Columns[i].Width = 84;
            }
            //button1.Enabled = false;
            dataGridView1.ReadOnly = true;
            button2.Enabled = true;
            conn.Open();
        }

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧