如何访问远程电脑上的MS SQL数据库并操作它

lanjianlele1 2008-03-19 03:17:46
ÒªÇó£ºÊ¹ÓÃODBCµÄ·½Ê½£¬ÀýÈçÎÒÔÚ·þÎñÆ÷µçÄÔÉϵĴúÂëÈçÏÂ
CDatabase db;

if(!db.Open(_T("FirstODBC"), // £¨ÏµÍ³Ô´Ãû£©

FALSE, //bExclusive

FALSE, //bReadOnly

_T("ODBC; UID=sa; PWD=sys;"), //lpszConnect £¨ÓëÊý¾Ý¿âµÄÁ¬½Ó·½Ê½£©

FALSE))

{ //bUseCursorLib


MessageBox("Could not open database","Could not open database",MB_OK);
return;

}

CUserConnect set(&db);//»ùÀàÊÇCRecordset

try

{

set.Open();

}

catch (CDBException* pEx)

{


TCHAR szErrorMessage[1024];

if (pEx-> GetErrorMessage(szErrorMessage, sizeof(szErrorMessage)))

{


MessageBox(szErrorMessage,szErrorMessage,MB_OK);


}

return;

}


try

{

set.AddNew();

}

catch (CDBException* pEx)

{


TCHAR szErrorMessage[1024];

if (pEx-> GetErrorMessage(szErrorMessage, sizeof(szErrorMessage)))

{


MessageBox(szErrorMessage,szErrorMessage,MB_OK);


}

return;

}
LPCSTR IPAddress;
char szHostName[128]; //½«±¾»úµÄÃû³Æ´æÈëһάÊý×é,Êý×éÃû³ÆΪszHostName
struct hostent * pHost;
if(gethostname(szHostName,128)==0)
{
pHost = gethostbyname(szHostName);
for( int i = 0; pHost!= NULL && pHost-> h_addr_list[i]!= NULL; i++ )
{
IPAddress=inet_ntoa (*(struct in_addr *)pHost-> h_addr_list[i]);

}
}
set.m_id=0;

set.m_user_name=szHostName;

set.m_user_sex="wu";

set.m_address=IPAddress;

set.m_age=25;

set.m_zip="wu";

set.m_phone="13590363282";
try

{

set.Update();

}

catch (CDBException* pEx)

{


TCHAR szErrorMessage[1024];

if (pEx-> GetErrorMessage(szErrorMessage, sizeof(szErrorMessage)))

{


MessageBox(szErrorMessage,szErrorMessage,MB_OK);


}

return;

}


set.Close();

db.Close();
Õâ¶Î´úÂëÔÚ·þÎñÆ÷¶ËÔËÐУ¬¿ÉÒÔ½«Ïà¹ØµÄÊý¾Ý´æµ½Êý¾Ý¿âµÄ±í¸ñÖУ¬ÎÒÔÚ¿Í»§¶ËÒ²ÏëÓÃÕâÖÖ·½Ê½Ð޸ķþÎñÆ÷µÄÊý¾Ý¿â£¬ÇëÎʸÃÈçºÎʵÏÖ,¿Í»§¶ËÈçºÎ²ÅÄÜ·ÃÎʵ½·þÎñÆ÷µÄÊý¾ÝÔ´£¿
...全文
89 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanjianlele1 2008-03-19
  • 打赏
  • 举报
回复
xkyx_cn谢谢你说的方法搞定了
china_bai 2008-03-19
  • 打赏
  • 举报
回复
另外,2楼的链接字符串在使用ADO的情况下,也可以:

"Driver={SQL Server};Server=%s;Database=%s;Uid=%s;Pwd=%s;"
china_bai 2008-03-19
  • 打赏
  • 举报
回复
1、首先在客户机上通过下列步骤:
控制面板-》性能和维护-》管理工具-》数据源(ODBC)
建立一个系统DSN,在建立完成后,确保测试通过。

2、db.Open(_T("youDSN"), // (上面建立的系统DSN名)

FALSE, //bExclusive

FALSE, //bReadOnly

_T(""ODBC;dsn=youDSN;database=DBName;uid=sa;pwd=;""), //lpszConnect (与数据库的连接方式)

FALSE)

3、其他与在服务器端的操作一样。
闪破风浪 2008-03-19
  • 打赏
  • 举报
回复
注:*****代表你所建立的工程名称

先在stdafx.h中导入#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
加入头文件
#include "icrsint.h"
#include "adoid.h"
然后进行下面的书写,必须要初始化COM 即::CoInitialize(NULL);
还要加入成员变量
_RecordsetPtr pRec;
_ConnectionPtr pCon;


BOOL C*****App::InitInstance()
{
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}

AfxEnableControlContainer();


CString str;
::CoInitialize(NULL); //初始化com 必须为NULL
str.Format("Provider=sqloledb;Network Library=DBMSSOCN;Initial Catalog=Test;User ID=sa;Password=1234;Data Source=192.168.0.20,1433");

pCon.CreateInstance(__uuidof(Connection));
try{
pCon->Open(_bstr_t(str),"","",adModeUnknown);

}
catch(_com_error e)
{
MessageBox(NULL,"连接数据库失败!","警告",MB_OK|MB_ICONHAND);
return FALSE;
}
}


在C****App中添加执行sql语句的方法
bool C*****App::OpenSQL(CString &strRec)
{
pRec.CreateInstance(__uuidof(Recordset));

if ( pRec->State )// 如果记录集打开的话,把它关了
pRec->Close();

try{// 正常的SQL语句
pRec->Open(_variant_t(strRec),pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
return true;
}
catch(_com_error e)
{
MessageBox(NULL,"连接表出错!","警告",MB_OK|MB_ICONHAND);
return false;
}
}
在退出的时候关闭数据库连接


int C****App::ExitInstance()
{
try
{ // 关闭数据库
if ( pCon->State )
pCon->Close();
pCon.Release();
}
catch(_com_error e)
{
}
::CoUninitialize();

return CWinApp::ExitInstance();
}
xkyx_cn 2008-03-19
  • 打赏
  • 举报
回复
1.在客户端也建立一个ODBC数据源连接到服务器,程序里直接使用
2.使用不同的连接串:

strConnStr.Format("Driver={SQL Server};Server=%s;Database=%s;Uid=%s;Pwd=%s;", strDBServer, strDBName, strDBUser, strDBPassword);
lanjianlele1 2008-03-19
  • 打赏
  • 举报
回复
补充为要求:使用ODBC的方式,例如我在服务器电脑上的代码如下
CDatabase db;

if(!db.Open(_T("FirstODBC"), // (系统源名)

FALSE, //bExclusive

FALSE, //bReadOnly

_T("ODBC; UID=sa; PWD=sys;"), //lpszConnect (与数据库的连接方式)

FALSE))

{ //bUseCursorLib


MessageBox("Could not open database","Could not open database",MB_OK);
return;

}

CUserConnect set(&db);//基类是CRecordset

try

{

set.Open();

}

catch (CDBException* pEx)

{


TCHAR szErrorMessage[1024];

if (pEx-> GetErrorMessage(szErrorMessage, sizeof(szErrorMessage)))

{


MessageBox(szErrorMessage,szErrorMessage,MB_OK);


}

return;

}


try

{

set.AddNew();

}

catch (CDBException* pEx)

{


TCHAR szErrorMessage[1024];

if (pEx-> GetErrorMessage(szErrorMessage, sizeof(szErrorMessage)))

{


MessageBox(szErrorMessage,szErrorMessage,MB_OK);


}

return;

}
LPCSTR IPAddress;
char szHostName[128]; //将本机的名称存入一维数组,数组名称为szHostName
struct hostent * pHost;
if(gethostname(szHostName,128)==0)
{
pHost = gethostbyname(szHostName);
for( int i = 0; pHost!= NULL && pHost-> h_addr_list[i]!= NULL; i++ )
{
IPAddress=inet_ntoa (*(struct in_addr *)pHost-> h_addr_list[i]);

}
}
set.m_id=0;

set.m_user_name=szHostName;

set.m_user_sex="wu";

set.m_address=IPAddress;

set.m_age=25;

set.m_zip="wu";

set.m_phone="13590363282";
try

{

set.Update();

}

catch (CDBException* pEx)

{


TCHAR szErrorMessage[1024];

if (pEx-> GetErrorMessage(szErrorMessage, sizeof(szErrorMessage)))

{


MessageBox(szErrorMessage,szErrorMessage,MB_OK);


}

return;

}


set.Close();

db.Close();
这段代码在服务器端运行,可以将相关的数据存到数据库的表格中,我在客户端也想用这种方式修改服务器的数据库,请问该如何实现以及客户端如何才能打开服务器端的数据源如FirstODBC
.NET Framework 4.0 常用类库参考手册 [微软官方 MSDN] MSDN Library - .NET Framework 4.0 - 命名空间 (节选版) 制作成了chm格式,方便离线状态下学习! ======================================= 原文地址:http://msdn.microsoft.com/zh-cn/library/ms229335.aspx ======================================= .NET Framework 类库 - 命名空间 (节选版) Microsoft.Win32 提供两种类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。 System 包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、特性和处理异常的基础类和基类。其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。 System.Collections 包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。 System.Data 包含组成大部分 ADO.NET 结构的类。ADO.NET 结构使您可以生成可用于有效管理来自多个数据源的数据的组件。 System.Data.Common 包含由 .NET Framework 数据提供程序共享的类。.NET Framework 数据提供程序描述用于在托管空间中访问数据源(如数据库)的类的集合。 System.Data.Linq 包含支持在 LINQ to SQL 应用程序中与关系数据库进行交互的类。 System.Data.Linq.Mapping 包含用于生成表示关系数据库的结构和内容的 LINQ to SQL 对象模型的类。 System.Data.Mapping 提供用于存储数据映射信息的类型。 System.Data.Metadata.Edm 包含一组类型,这些类型表示模型中由实体框架使用的概念,以及一组帮助应用程序使用元数据的类。 System.Data.Objects 包含可访问对象服务的核心功能的类。 System.Data.Objects.DataClasses 包含以下这些类:Entity Data Model (EDM) 中定义的类型的基类、由导航属性返回的类型的基类,以及用于定义将公共语言运行时 (CLR) 对象映射到概念模型中类型的特性的类。 System.Data.Sql 包含支持特定于 SQL Server 的功能的类。此类的 API 扩展已添加到 SQL Server 的 .NET Framework 数据提供程序 ( System.Data.SqlClient) 中。 System.Data.SqlClient 包含封装 SQL Server .NET Framework 数据提供程序的类。SQL Server .NET Framework 数据提供程序描述了用于在托管空间中访问 SQL Server 数据库的类集合。 System.IO 包含允许对数据流和文件进行同步和异步读写的类型。 System.Linq 包含支持使用语言集成查询 (LINQ) 的查询的类和接口。 System.Web 提供启用浏览器/服务器通信的类和接口。 ……

4,011

社区成员

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

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