Delphi的ADO访问数据库的问题

问题一:
多线程并发时,每个线程使用自己的adoconnection连接oracle,然后各自执行自己的查询,会不会有优先级的问题?

问题二:
sql语句在代码里通过ado查询和在plsql里查询,速度差异会很大吗?

3个回答

(1)不会有什么优先级的问题,在sql中,单条语句本身构成一个事务它是原子的。比如
update table set a = a + 1,这里a = a+1肯定是原子操作,不可能有并发问题。
但是,如果你的程序中有多条sql语句,又没有事务,就不一定了。所以要用事务。
(2)按理说差距不大,因为接口开销是很小的。但是如果你大量执行简单的查询,积少成多,也不一定。对此,你应该优化查询,多用存储过程。

xumenger
xumenger 对于问题一,为什么我的项目中,按照问题一所描述的多个线程,有的会很快执行完SQL返回,有的会很慢?主要是差距特别明显
大约 4 年之前 回复

使用线程执行数据库操作,是以相对独立数据处理,独立完成操作为目的。它们是没有优先级的。也不存在事务机制。它们的速度,取决于线程分配CPU占用时间和数据处理们复杂性。

交给线程处理(非同步),实质上就是交给操作系统,分配CPU时间段进行处理。它具有相对独立性。

xumenger
xumenger 当多个线程去访问数据库的时候,数据库那边为了处理多个线程的访问,是不是也会开启对应个数的线程?
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Delphi ADO访问数据库
unit ado; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, ADODB, DB, Grids, DBGrids, StdCtrls; type   TfrmMain = class(TForm)
ado访问数据库的问题。
在一台服务器上装了NT SERVER 4。0和SQL SERVER 7。0。用administrtor登陆,没有设密码。在局域网内别的机器也装了NT SERVER 4。0。没有装SQL SERVER。rn但是只能在用administrator登陆后访问才能用ADO访问服务器上的数据库。当更改了administrator的密码后,就无法访问数据库。不知道是什么原因?谢谢指教。rn================================================================rnrnCSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!rnrn★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。 rn★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。rn★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! rn★ 支持在线检测程序升级情况,可及时获得程序更新的信息。rnrn★★ 签名 ● rn 可以在您的每个帖子的后面自动加上一个自己设计的签名哟。rnrnHttp://www.ChinaOK.net/csdn/csdn.ziprnHttp://www.ChinaOK.net/csdn/csdn.rarrnHttp://www.ChinaOK.net/csdn/csdn.exe [自解压]rnrn
Ado访问数据库的问题~~~
_ConnectionPtr m_Connection;rn _RecordsetPtr m_Recordset;rn CString sCarNum="";rn _bstr_t sDataType="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Manage.mdb;";rnrn //初始化OLE环境rn AfxOleInit();rnrn //连接数据库rn m_Connection.CreateInstance(_uuidof(Connection));rn m_Connection->Open(sDataType,"","",NULL);rn //连接数据集rn m_Recordset.CreateInstance(_uuidof(Recordset));rn m_Recordset->Open(_variant_t("车辆信息"),m_Connection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdTable);rnrn //数据操作rn sCarNum=(char*)(_bstr_t)m_Recordset->Fields->GetItem(_variant_t("车牌类型"))->Value;rn AfxMessageBox(sCarNum);rnrn if (!m_Recordset->Supports(adAddNew)) return;rn rn m_Recordset->AddNew();rnrn m_Recordset->Fields->GetItem(_variant_t("记录日期"))->Value=(_bstr_t)"2006-03-12";rn m_Recordset->Fields->GetItem(_variant_t("车牌号码"))->Value="京HJ8888";rn m_Recordset->Fields->GetItem(_variant_t("车牌颜色"))->Value="黄色";rn m_Recordset->Fields->GetItem(_variant_t("车牌类型"))->Value="大功率汽车";rn m_Recordset->Update();rn m_Recordset->Close();rnrnrn程序运行后,出现"Unhandled exception in DataBase1.exe (KERNEL32.DLL):0xE06D7363:Microsoft C++ Exception."错误~~~调试发现问题出在m_Recordset->AddNew();这句上,请问是什么原因引起的这个问题?该怎么解决~?rnrn
ado访问数据库的问题
数据库是sql或者是access 在访问这两者的时候差别大吗
ADO访问数据库的问题
我用ADO对象访问数据库是,总是在执行SQL语句的时候出现异常(也就是在调用Execute函数的时候),rn请问是怎么回事啊???我急啊
一个ADO访问数据库的问题
在VC代码中怎么调用存储过程?存储过程到底是个什么东东,完成什么功能,在VC访问数据库中怎么创建和使用?
ado访问数据库简单问题
如何不用建数据源直接数据库(用ADO)??
多线程ADO访问数据库的问题。。。。
在多线程ADO访问数据库时,每一个TADOQuery对应一个ADOConnection,在进行读取访问时,速度能快吗?rnrn有什么办法能加快读取速度吗?
关于ADO访问数据库的问题!
我建了以个基于对话框的应用程序,目的是对Access中的某个通讯录表进行查询,插入,删除等操作,主对话框中有相应的功能菜单项,点击相应的菜单弹出相应的对话框处理;对话框上有查询,删除,更新等菜单项,因为这些功能都会对数据库进行访问,所以我就没有在主对话框的OnInitDialog()和InitInstance()函数中进行连接数据库的初始化和连接,而是在各个弹出对话框的相应函数中进行这些工作,由于自认为这些对话框之间对数据库进行初始化和连接工作互不影响,所以各自的代码基本上是相同的,rn 但是我发现在有的弹出对话框中对数据库操作会产生错误,不知大侠们对我的做法有啥意见呢???????????????
ADO访问数据库出错问题
sql='select * from (select chargedparty as 电话号码,callingext as 分机号,calledparty as 被叫,origdate as 日期,origtime as 时间,duration as 时长,cost as 费用 from users where 1=1 and origdate<='20051120' union select chargedparty as 电话号码,callingext as 分机号,calledparty as 被叫,origdate as 日期,origtime as 时间,duration as 时长,cost as 费用 from [;database=C:\Documents and Settings\Administrator\桌面\新建文件夹 (3)\10.mdb].users where origdate>='20051021') where 分机号 in ('2100') order by 分机号,日期,时间'rn ADOQuery1.Close;rn ADOQuery1.SQL.Text:=sql;rn ADOQuery1.Open;rnrn上面sql在access里执行没问题,能通过,但是在delphi 中出现(‘不正常地定义参数对象,提供了不一致或不完整的信息’)
关于ado访问数据库的问题
用ado访问数据库,将相关的信息显示到界面上,并打印出来,在执行打印操作时出错:Runtime Error!请问是什么原因?
用ado 访问数据库 问题
我在用ado定时查询过滤数据库中的数据时 当定时器运行一段时间后 就出现数据源2 odbc驱动报错!rn我的代码大致意思如下:rn sub time1 () ' 我的定时器时间是一秒!rn adorecord2= adodatabase.exculate(" select * from "配置好的数据源2)rn adorecord1 =adodabase1.exculate("select * from "数据源" ")rn adorecord1.field( time)= adorecord2.field(time )rn adorecord1.field( name)= adorecord2.field(name)rn adorecord1.field( telephone)= adorecord2.field(telephone)rn adorecord1.field( address)= adorecord2.field(address)rn其中 adorecord2的数据是动态变化的 我通过查询条件 查一段时间后的新记录 并把该记录写到我的自己数据库mdb中 即 adorecord1 这张表中! 我做了实验 当我把上面的赋值语句屏蔽掉 不把记录向自己的数据库写时 数据源2 的odbc驱动 不报错!我感到很困惑!既然查询的语句能查询到一个记录集 不抱错 那么我把数据结果写到一个目标数据库有什么问题! 是不是不能同时 打开2个数据源? 也不是啊!这个问题对我太重要了 数据录入不到目标数据库 我后面的工作都停顿了!!!!
ADO访问数据库机制问题
各位大吓,我想知道ado访问数据时,当用query时它才连接数据库,还是当程序运行就开始连接,我现在有好几个程序都用自己的ado连接数据库,我怕它对数据库开了一个线程后,就不不关闭,当query不用时也不关闭,是这样吗?这样数据库的session 一多,就会出错!请各位指教
一个访问数据库的问题(ADO)
一个访问数据库的文件,运行时出现3处错误,大家来帮我分析分析,告诉我这个语句是干什么用的,(我是从别的列子上考下来的),谢谢rn#ifdef _WIN32rnLANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIEDrnrn运行是,提示以下错误!rnc:\documents and settings\administrator\桌面\数据库书的光盘资料\ch5\1231\ado.h(26) : error C2143: syntax error : missing ';' before 'constant'rnc:\documents and settings\administrator\桌面\数据库书的光盘资料\ch5\1231\ado.h(26) : error C2501: 'LANGUAGE' : missing storage-class or type specifiersrnc:\documents and settings\administrator\桌面\数据库书的光盘资料\ch5\1231\ado.h(26) : fatal error C1004: unexpected end of file foundrnError executing cl.exe.rnrn没分了,明天最佳给您!
ado 访问 ACCESS 数据库的问题
程序 代码rnrn#include rn#pragma hdrstoprnrn#include "Unit1.h"rn//---------------------------------------------------------------------------rn#pragma package(smart_init)rn#pragma resource "*.dfm"rnTForm1 *Form1;rnTADOConnection*adoconn ;rn//---------------------------------------------------------------------------rn__fastcall TForm1::TForm1(TComponent* Owner)rn : TForm(Owner)rnrnrn//---------------------------------------------------------------------------rnrnrnvoid __fastcall TForm1::Button1Click(TObject *Sender)rnrn void connection(void);rn connection();rn TADOQuery *dynamicADOQuery;rn dynamicADOQuery=new TADOQuery(this);rn dynamicADOQuery->Connection=adoconn;rn dynamicADOQuery->SQL->Clear();rn dynamicADOQuery->SQL->Add("select * from mkx");rn dynamicADOQuery->Open(); rnrn//---------------------------------------------------------------------------rnrn void connection(void)rnrnrn adoconn->Close();rn adoconn->ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\wangdb.mdb;Persist Security Info=False" ;rn adoconn->Open() ;rnrnrnrnrn错误报警 :rnrn porjet projet1.exe raised exception class EAccessViolation with message 'ACCESS violation at address 4031EA8A in module ' dbrt160.bpl '.read of address 00000000 'rnprocess stopped use step or run to continue.rnrn我以为是系统的问题 于是在另一台机器上装了 C++ BUILDER 6 重新运行 可是问题依旧  大家 帮我看看这是怎么了??rnrnrn难到ADO 有问题?? 如果有问题  不可能两台机器都有问题吧!!rnrn第一次在这上面发帖  谢谢 !!rnrnrnrnrnrn
通过ado访问数据库的问题
c++ build程序,通过ado访问数据库,程序允许后提示库未注册,请问是什么原因,要注册哪个库?
ADO访问ORACL数据库的问题
在DELPHI中不安装ORACL客户端如何直接访问数据库
ADO访问数据库的数据类型转换问题
ADO访问数据库的数据类型转换问题rn Holder = theApp.m_pADOSet->GetCollect("MEMO");rn str = Holder.vt==VT_NULL?"":(char *)(_bstr_t)Holder;rnrnrnMEMO的数据类型为char时正常,但MEMO的数据类型为Nvarchar或Text时,上面的写法就要报错,谁知道当MEMO的数据类型为Nvarchar或Text时该怎么写啊!!!
ado 访问 MSSQL 数据库的问题
同一个服务器上同时运行2个ado 应用程序,一个是 asp 的,一个是 isapi ,为什么2个同时用后 asp 就不能访问数据库了?
ADO访问数据库的初始化问题
利用ADO访问数据库,除了要import一个东东外,还要做一步初始化,请问初始化的用法。应该在什么地方,调用什么函数?
ADO编程访问数据库
ADO编程,通过ADO编程实现SQL,ACCESS等数据库的访问,读取与写入记录。
evc 访问数据库 ado
evc 访问数据库 ado
ado访问数据库内存泄露
ado访问数据库内存泄露
ADO访问数据库
VC++ 通过ADO访问数据库并添加、修改、删除、查询记录
Ado访问DB2数据库
我用Ado访问数据库,在执行AddNew()操作记录后,如何能得到这条记录中自增加字段的值,在SQL Server中直接对记录集操作,就能得到,可是DB2为什么不行呀
c++builder ADO访问数据库
c++builder ADO访问数据库,使用TADOStoredProc控件执行存储过程,怎么将返回的结果集,提供给TDataSetProvider的Dataset?
关于ADO访问数据库
请问哪位有关于ADO访问Firebird数据库的实例,很简单的也行,用c++builder开发数据库,谢谢
Ado访问数据库
我的目的是利用mfc调用Ado访问数据库access,在书上<>--求是科技编写的 ,光盘力给的代码,一个都不能运行,请问是不是调用access时需要什么设置啊rn简单的代码rnaccess数据库表明UserInfo,就三个ID,UserName和Passwordrn// ADODemo.cpp : Defines the entry point for the console application.rn//rnrn#include "stdafx.h"rn#include "iostream.h"rnrn//导入ADO类型库rn#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")rnrnrnint main(int argc, char* argv[])rnrn //初始化Com对象rn CoInitialize(NULL);rnrn tryrn rn //初始化数据库连接对象rn _ConnectionPtr pConn("ADODB.Connection");rn //打开数据库连接rn pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Demo1\\Debug\\DemoAdo.mdb;Persist Security Info=False", "", "", adConnectUnspecified);rn rn //初始化记录集对象rn _RecordsetPtr pRs("ADODB.Recordset");rn //打开指定记录集rn pRs->Open("Select * From UserInfo", _variant_t(pConn, true), adOpenStatic, adLockOptimistic, adCmdText);rnrn //访问记录集中数据rn while(!pRs->EndOfFile)rn rn cout<<"UserName:"<<_bstr_t(pRs->GetCollect("UserName"))<<"\t";rn cout<<"Password:"<<_bstr_t(pRs->GetCollect("Password"))<MoveNext();rn rn //关闭记录集rn pRs->Close();rn //关闭数据库连接rn pConn->Close();rnrn rn catch(_com_error &e)rn rn cout<
运用ADO访问数据库
运用ADO访问数据库,实现Vc 与DB连接
Ado访问PARADOX数据库
ADO没有PARADOX数据库的引擎,要用ADO访问PARADOX数据库,我试过三种方式来进行操作:用Microsoft.Jet.OLEDB.4.0来替代PARADOX数据库引擎。
ado访问数据库的方法类
通过ADO访问数据库,已经将ado包装为c++的类,使用方便
ado访问数据库
ss project基于窗口rn在CSsApp类,iniltistance中连接数据库,rn AfxOleInit(); //初始化OLE环境rn m_pConnection.CreateInstance("ADODB.Connection");rn record.CreateInstance("ADODB.Recordset");rn tryrn m_pConnection->Open("Provider=SQLOLEDB;Data Source=(local);Initial Catalog=test;uid=sa;pwd=",rn "",rn "",rn adModeUnknown);rn //连接数据库testrn catch(_com_error e)rn AfxMessageBox(e.ErrorMessage());rn return false;rn rnm_pConnection是声明在ss.cpp中,extern m_pConnection然后在窗口加一个BUTTONrnvoid CSsDlg::OnButton1() rnrn // TODO: Add your control notification handler code herern //在数据库test的student表中加一条记录rn m_pConnection->Execute("insert into student values('1','zq')",NULL,adCmdText);rn rnrn[color=#FF0000]为什么一按按钮就出错,如果都写在inilInstance中的话就不会出错[/color]
ado多线程访问数据库
采用多线程的方法访问数据,同时连接多个不同的数据库,可结果并非实际所想,线程是并发生成,可数据库访问结果并非并行,尤其在数据库连接不上直至超时,感觉好像数据库连接同一时间只能一个的样子。线程如下,难道有问题吗?还望答复rnUINT CheckDBFunc(LPVOID pinfo)rnrn ::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED );rn _ConnectionPtr m_pConn;rn _RecordsetPtr m_pRecord;rn ..........rn ....//连接、操作数据库rn .............rn ::CoUninitialize();rn return 1;rnrnrn
C++ ADO访问数据库
C++通过ADO来访问数据库,封装成类了
ADO对象模型访问数据库
这几天被数据库这些东西给整头疼了,这些代码,不确切的说是“单词”,认识的真没有几个,OK,先看下面的代码,等一下围绕 ADO对象模型访问数据库分享点东西。 Option Explicit Dim objCnn As ADODB.Connection '创建connect对象 Dim objRst As ADODB.Recordset
ado访问数据库错误!
用 _ConnectionPtr对象的Execute方法执行SQL命令返回的给_RecordsetPtr没错rn即:_variant_t RecordsAffected;rn m_pRecordset = m_pConnection->Execute("SELECT COUNT(*) FROM users",&RecordsAffected,adCmdText);没有发生错误rn但是当我直接用Recordset对象进行查询取得记录集是就发生了错误:rn即:m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);有错rn清高手指点;rn谢谢qq38007288rn
ADO多用户访问数据库
程序结构是这样的:rnrn在客户端,用户(可能多个)要对数据库进行查看,插入数据操作,rn一个TADOConnection,一个ADOQuery,rnrn问题是:rnrn没有使用多线程,当多个用户同时进行操作时会不会出问题?rn
ADO访问SQL数据库
ADO访问SQL数据库,并进行存储读取等操作。
ADO访问数据库相关资料
关于ADO访问数据库的一些基本操作,收集的,应该有用吧
利用ado 访问数据库
 利用ADO访问数据库asp相关的一些知识
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件