数据库:连接字符串,操作等
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 |
相关文章推荐
- "此操作要求连接到 'master' 数据库。无法创建与 'master' 数据库之间的连接,这是因为已打开原始数据库连接,并且已从连接字符串中删除凭据。请提供未打开的连接。"
- 将数据库连接字符串异或操作后存放到INI文件中是否安全?是不是很容易就被别人解密出来?
- c# cs方式操作数据库 非使用sql连接字符串直接连接数据库
- 数据库操作中的函数应用(难忘的 字符串连接出错~!
- 与数据库进行异步操作的连接字符串的写法
- ado.net关于操作数据库的连接字符串整理
- CF MVC3此操作要求连接到 'master' 数据库。无法创建与 'master' 数据库之间的连接,这是因为已打开原始数据库连接,并且已从连接字符串中删除凭据。请提供未打开的连接 解决方法
- 数据库连接字符串大全
- 网址收藏-各种数据库的连接字符串-http://www.connectionstrings.com/
- asp连接access、sql数据库代码及数据库操作代码
- 操作ado连接数据库的步骤
- 数据库连接字符串大全 之 SQL服务器篇
- 数据库连接字符串的写法(参考)
- cmd连接数据库操作
- QT连接数据库的基本操作
- C#自动注册sqlite ado.net数据库驱动 及 自定义连接字符串
- asp连接access sql数据库代码及数据库操作
- 数据库连接字符串与连接池
- 数据库操作:java连接MSSQL实例代码演示
- 数据库操作:java连接DB2实例代码演示