您的位置:首页 > 数据库

数据库:连接字符串,操作等

2005-10-29 10:28 441 查看
T:ADO访问数据库问题
Q:我的Oracle8.17数据库访问代码如下:

std::string strSQL="Select PosID, SensorID, PLaneNo, SLaneNo From PosSensor Order by SensorID";

_RecordsetPtr pRecord;
try
{
pRecord.CreateInstance( "ADODB.Recordset" );
pRecord->Open(strSQL.c_str(), m_pConnect.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText);
}
catch ( _com_error &e )
{
std::ostringstream oss;
oss << "数据库打开PosSensor表错误:" << e.ErrorMessage();
g_sysLog.AddLog(102, oss.str());
return false;
}
catch (...)
{
g_sysLog.AddLog(102, "数据库打开PosSensor表错误:未知类型");
return false;
}

结果出错,由catch(...)捕获

把SQL语句中的Order by部分去掉就没问题。但是将此语句放到SQLPlus中运行却没问题。

每招了,望哪位大大能指点一下。
A:这样试一下

std::string strSQL="Select PosID, SensorID, PLaneNo, SLaneNo From PosSensor";

_RecordsetPtr pRecord;
try
{
pRecord.CreateInstance( "ADODB.Recordset" );
pRecord->CursorLocation = adUseClient;
pRecord->Open(strSQL.c_str(), m_pConnect.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText);
pRecord->Sort = "SensorID";

}
catch ( _com_error &e )
{
std::ostringstream oss;
oss << "数据库打开PosSensor表错误:" << e.ErrorMessage();
g_sysLog.AddLog(102, oss.str());
return false;
}
catch (...)
{
g_sysLog.AddLog(102, "数据库打开PosSensor表错误:未知类型");
return false;
}

会解决问题的
T:如何用ADO连接带有密码的ACCESS数据库
Q:_ConnectionPtr p_Connection
p_Connection.CreateInstance("ADODB.Connection");//创建Connection对象
p_Connection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","Admin","fff",adModeUnknown);///连接数据库

////////// 上述代码连接数据库失败 请教应如何填写_ConnectionPtr 的Open 函数
A:p_Connection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","Admin","fff",adModeUnknown);///
改成
p_Connection->Open(Provider=Microsoft.Jet.OLEDB.4.0;data Source=xxx.mdb;Jet OLEDB:Database Password=XXX,"","",NULL);
T:谁能告诉我这是怎么回事啊?急!在线等,分不够在加,马上解决马上结恬!
Q:本人在MDI视图中打开一表
_bstr_t query = strQuery;
_bstr_t source = m_strSource;
m_pUserSet->Open(query,source,adOpenDynamic,adLockOptimistic,adCmdText);
并把此表记录显示在视图的list中;
然后在右击list时打开一对话框用于添加或更改记录:
dialogtrhead.m_pUserSet = this->m_pUserSet;
dialogtrhead.m_CurRecordPos = this->m_CurRecordPos;
if(dialogtrhead.DoModal()==IDOK)
{
AfxMessageBox("添加记录!");
//ASSERT(dialog1.m_hWnd);
}
然后我在dialogtrhead的OnInitDialog中取数据显示没问题:
var = m_pUserSet->GetCollect("SEQ_NO");
if(var.vt != VT_NULL) m_seqNO = (LPCSTR)_bstr_t(var);
但我在更新记录时用:
m_pUserSet->PutCollect("SEQ_NO", _variant_t(m_seqNO));
或:
pField = m_pUserSet->Fields->GetItem(_variant_t("SEQ_NO"));
pField->Value = _bstr_t("dyx");
都不行,用bOk = m_pUserSet->Supports(adUpdate);查得bOk 为0
请问这是怎么回事,我打开时用的可是adOpenDynamic啊,请各位帮我想想办法
更新记录不用_CommandPtr,这问题搞了我一个多星期了,本来都转用CommandPtr但对整个系统操作不便,一定要用recordset。
A:open打开之前要设置m_pUserSet->CursorLocation = adUseClient;

adUseClient 使用客户端游标。
T:请问高手:不用SQL server企业管理器不配置ODBC数据源,怎样直接在程序中新建数据库
Q:最好给个例子,谢谢

我在VCKBASE和CSDN没有找到……
A:连接字串这么写
_ConnectionPtr pMyConnect=NULL;
HRESULT hr=pMyConnect.CreateInstance(__uuidof(Connection)));
if(FAILED(hr))return;

_bstr_t strConnect="Provider=SQLOLEDB; Server=server_name;"
"Database=database_name; uid=user_name; pwd=password;";
//connecting to the database server now:
try{pMyConnect->Open(strConnect,"","",NULL);}
catch (_com_error &e)
{
::MessageBox(NULL,e.Description(),"警告",MB_OK | MB_ICONWARNING);
}

然后

_RecordsetPtr m_pRecordset;
if(!FAILED(m_pRecordset.CreateInstance( __uuidof( Recordset )))
{
m_pDoc->m_initialized=FALSE;
return;
}

try{
m_pRecordset->Open(_variant_t("mytable"),
_variant_t((IDispatch *)pMyConnect,true), adOpenKeyset,
adLockOptimistic, adCmdTable);
}
catch (_com_error &e)
{
::MessageBox(NULL,"错误。","提示",
MB_OK | MB_ICONWARNING);
}

Recordset对象的Open方法非常重要,它的第一个参数可以是一个SQL语句、一个表的名字或一个命令对象等等;第二个参数就是前面建立的连接对象的指针。
把Open方法的参数换一下即可
T:关于RichEdit中超过几万字的文本存入ACCESS数据库的问题!
Q:有人说过用Blob或OLEDB存。但我看到的代码都是将某个“文本文件”以这种方式存入数据库,但没看到过前台RichEdit中几万字的文本如何直接存入后台ACCESS数据库中!

我知道ACCESS中有个备注,但我须要存汉字几万个,备注也装不下!
大家谁有好办法或相关代码!帮帮我!谢谢了!
A:11. 访问长数据
在Microsoft SQL中的长数据包括text、image等这样长类型的数据,作为二进制字节来对待。
可以用Field对象的GetChunk和AppendChunk方法来访问。每次可以读出或写入全部数据的一部分,它会记住上次访问的位置。但是如果中间访问了别的字段后,就又得从头来了。
请看下面的例子:
//写入一张照片到数据库:
VARIANT varChunk;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];

//VT_ARRAY | VT_UI1
CFile f("h://aaa.jpg",CFile::modeRead);
BYTE bVal[ChunkSize+1];
UINT uIsRead=0;
//Create a safe array to store the array of BYTES
while(1)
{
uIsRead=f.Read(bVal,ChunkSize);
if(uIsRead==0)break;
rgsabound[0].cElements =uIsRead;
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_UI1,1,rgsabound);
for(long index=0;index<uIsRead;index++)
{
if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index])))
::MessageBox(NULL,"啊,又出毛病了。","提示",MB_OK | MB_ICONWARNING);
}
varChunk.vt = VT_ARRAY|VT_UI1;
varChunk.parray = psa;
try{
m_pRecordset->Fields->GetItem("photo")->AppendChunk(varChunk);
}
catch (_com_error &e)
{
CString str=(char*)e.Description();
::MessageBox(NULL,str+"/n又出毛病了。","提示",MB_OK | MB_ICONWARNING);
}
::VariantClear(&varChunk);
::SafeArrayDestroyData( psa);
if(uIsRead<ChunkSize)break;
}//while(1)
f.Close();

//从数据库读一张照片:
CFile f;
f.Open("h://bbb.jpg",CFile::modeWrite|CFile::modeCreate);
long lPhotoSize = m_pRecordset->Fields->Item["photo"]->ActualSize;
long lIsRead=0;

_variant_t varChunk;
BYTE buf[ChunkSize];
while(lPhotoSize>0)
{
lIsRead=lPhotoSize>=ChunkSize? ChunkSize:lPhotoSize;
varChunk = m_pRecordset->Fields->
Item["photo"]->GetChunk(lIsRead);
for(long index=0;index<lIsRead;index++)
{
::SafeArrayGetElement(varChunk.parray,&index,buf+index);
}
f.Write(buf,lIsRead);
lPhotoSize-=lIsRead;
}//while()
f.Close();
T:谁敢看看我的问题给高分
Q:怎么样把一个照片保存在数据库中
又怎么样从数据库中提出一个照片
A://写入一张照片到数据库:
VARIANT varChunk;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];

//VT_ARRAY | VT_UI1
CFile f("h://aaa.jpg",CFile::modeRead);
BYTE bVal[ChunkSize+1];
UINT uIsRead=0;
//Create a safe array to store the array of BYTES
while(1)
{
uIsRead=f.Read(bVal,ChunkSize);
if(uIsRead==0)break;
rgsabound[0].cElements =uIsRead;
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_UI1,1,rgsabound);
for(long index=0;index<uIsRead;index++)
{
if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index])))
::MessageBox(NULL,"啊,又出毛病了。","提示",MB_OK | MB_ICONWARNING);
}
varChunk.vt = VT_ARRAY|VT_UI1;
varChunk.parray = psa;
try{
m_pRecordset->Fields->GetItem("photo")->AppendChunk(varChunk);
}
catch (_com_error &e)
{
CString str=(char*)e.Description();
::MessageBox(NULL,str+"/n又出毛病了。","提示",MB_OK | MB_ICONWARNING);
}
::VariantClear(&varChunk);
::SafeArrayDestroyData( psa);
if(uIsRead<ChunkSize)break;
}//while(1)
f.Close();

//从数据库读一张照片:
CFile f;
f.Open("h://bbb.jpg",CFile::modeWrite|CFile::modeCreate);
long lPhotoSize = m_pRecordset->Fields->Item["photo"]->ActualSize;
long lIsRead=0;

_variant_t varChunk;
BYTE buf[ChunkSize];
while(lPhotoSize>0)
{
lIsRead=lPhotoSize>=ChunkSize? ChunkSize:lPhotoSize;
varChunk = m_pRecordset->Fields->
Item["photo"]->GetChunk(lIsRead);
for(long index=0;index<lIsRead;index++)
{
::SafeArrayGetElement(varChunk.parray,&index,buf+index);
}
f.Write(buf,lIsRead);
lPhotoSize-=lIsRead;
}//while()
f.Close();
T:请问unicode显示的问题
Q:‘哈’的unicode编码是54C8
我用下面的代码:
test[0]= 0xc8;
test[1]= 0x54;
test[2]= 0;
printf("%s/n",test);
却出来了‘萒’字,它的unicode编码是8412
请问在C下面,如何知道unicode以后,把他正确的显示出来?
请大家帮忙啊~~~
T:求各种数据库的连接字符串格式!
Q:谢谢!!!
A:.数据库连接字符串的写法:

以下就是进行数据库的连接,由于ADO支持的数据库种类繁多,因此连接也相当复杂。从连接类型可以分为两种:1.采用连接字符串;2.使用UDL文件。对于每种方法又有不同的写法。

①.连接字符串

===>Access Connect String

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbtest.mdb

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbTest.mdb;Jet OLEDB:Database Password=********;");

===>SQLServer Connect String

Driver=SQL Server;Database=fwbmk;Server=127.0.0.1;UID=sa;PWD=xx; (自带)

使用标准安全级别:

strConnect = _T("Provider=sqloledb;Data Source=MyServerName;Initial Catalog=MyDatabaseName;User Id=MyUsername;Password=MyPassword;");

使用信任连接:

strConnect = _T("Provider=sqloledb;Data Source=MyServerName;Initial Catalog=MyDatabaseName;Integrated Security=SSPI;");

指定SQLServer实例:

strConnect = _T("Provider=sqloledb;Data Source=MyServerName/MyInstanceName;Initial Catalog=MyDatabaseName;User Id=MyUsername;Password=MyPassword;");

本地数据库:

strConnect = _T("Provider=sqloledb;Data Source=(local);Initial Catalog=myDatabaseName;User ID=myUsername;Password=myPassword;");

网络数据库:

strConnect = _T("Provider=sqloledb;Network Library=DBMSSOCN;Data Source=130.120.110.001,1433;Initial Catalog=MyDatabaseName;User

3

计算机软件技术《数据库部分》——ADO开发应用程序ID=MyUsername;Password=MyPassword;");

===>Oracle Connect String

微软提供的Oracle标准连接是:

strConnect = _T("Provider=MSDAORA;Data Source=serverName;User ID=userName; Password=userPassword;");

Oracle公司提供的连接方式:

使用标准安全级别:

strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;");

使用信任连接

1.strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=/;Password=;"); UID为'/'

2.strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;OSAuthent=1;");使用OSAuthent=1

对于连接字符串可以参考以下网页: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdreforacleprovspec.asp?frame=true http://download-west.oracle.com/otndoc/oracle9i/901_doc/win.901/a90171/using.htm
===>ODBC 配置数据源

strConnect = _T("DSN=ADOTest");
http://www.able-consulting.com/ado_conn.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐