| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3043 人关注过本帖
标题:[求助]VC SQL ADO编译错误
只看楼主 加入收藏
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
 问题点数:0 回复次数:10 
[求助]VC SQL ADO编译错误

现在学数据库开发,但是有点问题,在MSDN上查不到_ConnectionPtr这个类型,知道他是_Connection对象的指针,但是这个东西MSDN上也没有,还有那个_Command和_CommandPtr.

还有那个导入语句,为什么也有错误?

本程序只是建立一个对话框,我想在程序功能编写之前封装一个对数据库操作的类(象书上那样)。


注:其他地方没有对向导产生的代码做改动。


程序代码:

// MyAdo.h: interface for the CMyAdo class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MYADO_H__6A6254C7_C2FE_4912_9F98_7EF933E96C52__INCLUDED_)
#define AFX_MYADO_H__6A6254C7_C2FE_4912_9F98_7EF933E96C52__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#import \"c:\Program Files\Common Files\System\ado\msado15.dll\"
no_namespace rename(\"EOF\",\"adoEOF\"),rename(\"BOF\",\"adoBOF\")

class CMyAdo
{
public:
CMyAdo();
virtual ~CMyAdo();
public:
void OnInitConnect();
void Execute(_bstr_t strSQL);
void ExitConnect();
private:
_ConnectionPtr m_pConnection;
};

#endif // !defined(AFX_MYADO_H__6A6254C7_C2FE_4912_9F98_7EF933E96C52__INCLUDED_)



程序代码:

// MyAdo.cpp: implementation of the CMyAdo class.
//
//////////////////////////////////////////////////////////////////////

#include \"stdafx.h\"
#include \"SqlTest6.h\"
#include \"MyAdo.h\"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMyAdo::CMyAdo()
{

}

CMyAdo::~CMyAdo()
{

}


void CMyAdo::OnInitConnect()
{
AfxOleInit(); //初始化COM组件
try
{
this->m_pConnection->CreateInstance(\"ADODB.Connection\");

_bstr_t strConnect=\"Provider=SQLOLEDB;Password=236162;
Persist Security Info=True;User ID=wfpb;
Initial Catalog=USERMAN;Data Source=localhost;\";

this->m_pConnection->Open(strConnect,\"\",\"\",adModeUnknow);

}

catch(_com_error e)
{
MessageBox(e.ErrorMessage());
}
}

BOOL CMyAdo::Execute(_bstr_t strSQL)
{
try
{
if(m_pConnection==NULL)
OnInitConnect();

m_pConnection->Execute(strSQL,NULL,adCmdText);
return TRUE;
}

catch(_com_error e)
{
MessageBox(e.Description());
return FALSE;
}
}


void CMyAdo::ExitConnect()
{
m_pConnection.Close();
MessageBox(\"已连接断开\");
}




问题如下:

--------------------Configuration: SqlTest6 - Win32 Debug--------------------
Compiling...
MyAdo.cpp
e:\visual c++ project\sqltest6\debug\msado15.tlh(409) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
e:\visual c++ project\sqltest6\debug\msado15.tlh(1318) : error C2629: unexpected 'short ('
e:\visual c++ project\sqltest6\debug\msado15.tlh(1318) : error C2238: unexpected token(s) preceding ';'
e:\visual c++ project\sqltest6\myado.h(13) : error C2146: syntax error : missing ';' before identifier 'rename'
e:\visual c++ project\sqltest6\myado.h(13) : error C2501: 'no_namespace' : missing storage-class or type specifiers
e:\visual c++ project\sqltest6\myado.h(13) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

SqlTest6.exe - 5 error(s), 1 warning(s)

搜索更多相关主题的帖子: SQL ADO 编译 
2006-09-14 16:37
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

_ConnectionPtr 的那些可以看下 msado15.h ( 15 與版本有關).
------------------------------------------------------------------------------------------
不詳細看代碼了, 給個在 Console 查看 SQL 數據庫的例子參考一下:
(只是個簡單的例子, 沒有處理任何細節的東西....)

#include <iostream>

#import "C:\Program Files\Common Files\system\ado\msado15.dll" no_namespace \
rename("EOF", "EndOfRecordset")

using namespace std;

int main()
{
CoInitialize(NULL);

_ConnectionPtr hConn("ADODB.Connection");
_CommandPtr hCmd("ADODB.Command");
_RecordsetPtr hRds("ADODB.Recordset");

long i;

// 設置驅動
hConn->Provider = "SQLOLEDB";

// 連接屬性設置
// 對於 SQL2005 Server Express, 機器名稱後要加 \\SQLEXPRESS
hConn->Properties->Item["Data Source"]->Value = "YESHIROW\\SQLEXPRESS";
// MyDatabase 是 SQL 中的一個數據庫
hConn->Properties->Item["Initial Catalog"]->Value = "MyDatabase";
// 驗證模式:
hConn->Properties->Item["Integrated Security"]->Value = "SSPI";
// 連接超時:
hConn->ConnectionTimeout = 20;

// 打開數據庫
HRESULT hr = hConn->Open("", "", "", 0);

// 綁定到 Command
hCmd->ActiveConnection = hConn;

// 打開表 testTable1
hCmd->CommandText = "SELECT * FROM dbo.testTable1";

// 執行 SQL 語句
hRds = hCmd->Execute(NULL, NULL, 0);

// 列舉 Columns
for(i=0; i < hRds->Fields->Count; i++)
cout << (char*)((_bstr_t)hRds->Fields->Item[i]->Name) << '\t';
cout << endl;
cout << endl;

// 列興數據部分, (這裏以 字串方式, 其他類型自己處理吧.)
while(! hRds->EndOfRecordset)
{
for(i=0; i < hRds->Fields->Count; i++)
cout << (char*)((_bstr_t)hRds->Fields->Item[i]->Value) << '\t';
cout << endl;
hRds->MoveNext();
}

cout << endl;
hConn->Close();

CoUninitialize();
system("pause");
return(0);
}


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-09-14 17:33
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

m_pConnection.CreateInstance("ADODB.Connection");

_bstr_t strConnect="Provider=SQLOLEDB;Password=236162; \
Persist security Info=True;User ID=wfpb; \
Initial Catalog=USERMAN;Data source=localhost";

m_pConnection->Open(strConnect,"","",adModeUnknown);

为什么我这里老是Open失败呢?

我自己新加了一个登陆名,是SQL SERVER身份验证的。

用户名和密码是:wfpb和236162
我用SQL新建了一个数据库USERMAN。

现在请问,我哪里写错误了吗?

我是说strConnect赋值这里


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-14 18:53
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

为什么没人告诉一声啊,我实在不想停下脚步


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-14 22:13
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

SQL Server2005 Express 版本的, 要加 localhost\\SQLEXPRESS
------------------------------------------------------------------------------------
昨晚試了一下 _ConnectionPtr 與 SQL2005 Server 的連接的確不能正常.
但用 VS2005 的 CLR (System::Data::OleDb::OleDbConnection 或者 System::Data::SqlClient::SqlConnection )可以正常工作
-------------------------------------------------------------------------------------
使用 OleDbConnection:
..........
System::Data::OleDb::OleDbConnection^ hConn;
System::Data::OleDb::OleDbCommand^ hCmd;
System::Data::OleDb::OleDbDataReader^ hRds;

hConn = gcnew System::Data::OleDb::OleDbConnection("Provider=SQLOLEDB;Data Source=YESHIROW\\SQLEXPRESS;User ID=ko;Password=kokoko;Database=用於測試的數據庫;Persist security Info=True");
hCmd = gcnew System::Data::OleDb::OleDbCommand("SELECT * FROM testTable1");
hConn->Open();
hCmd->Connection = hConn;
hRds = hCmd->ExecuteReader();
.....

----------------------------------
使用 SqlConnection:
....
System::Data::SqlClient::SqlConnection ^ hConn;
System::Data::SqlClient::SqlCommand ^ hCmd;
System::Data::SqlClient::SqlDataReader ^ hRds;
hConn = gcnew System::Data::SqlClient::SqlConnection("Data Source='YESHIROW\\SQLEXPRESS';Initial Catalog=用於測試的數據庫");
hCmd = gcnew System::Data::SqlClient::SqlCommand("SELECT * FROM testTable1");
hConn->Open();
hCmd->Connection = hConn;
hRds = hCmd->ExecuteReader();
.....
-----------------------------
此外, 應該確保連接的用戶有登錄的許可權:

图片附件: 游客没有浏览图片的权限,请 登录注册


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-09-15 07:21
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 
以下是引用yeshirow在2006-9-15 7:21:25的发言:


昨晚試了一下 _ConnectionPtr 與 SQL2005 Server 的連接的確不能正常.

是指 SQL 身份驗證.

SSPI 是可以的, 如上上面的那個例子.


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-09-15 07:39
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

是不是 ADO 與 ADO.net 的關係呢, 無從知曉...


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-09-15 07:49
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
昏,多来几个人把这个问题说清楚点吧,本来就刚开始学SQL,ADO什么的,语句还有问题,无语,我是照着书写的,郁闷。

不过书上是SQL2000

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-15 16:08
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
System::Data::OleDb::
为什么老是说System不是空间名字.

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-15 18:24
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

还有一个问题:


// 綁定到 Command
hCmd->ActiveConnection = hConn;

// 打開表 testTable1
hCmd->CommandText = "SELECT * FROM dbo.testTable1";

// 執行 SQL 語句
hRds = hCmd->Execute(NULL, NULL, 0);


我在执行的时候,hCmd->ActiveConnection = hConn;老是抛出异常,说是无效指针。
害得我只能:
_bstr_t vSQL="SELECT * FROM dbo.testTable1";
hConn->Execute(vSQL,NULL,adCmdText);

这是为什么


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-16 20:02
快速回复:[求助]VC SQL ADO编译错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040145 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved