当前位置:首页 » 密码管理 » ado数据库访问实验

ado数据库访问实验

发布时间: 2024-10-16 14:24:08

1. vb 用ado连接sql数据库。。。。

在VB中使用ADO

在程序设计中,ADO不是作为可视化的控件来使用的,如果要在应用程序中使用ADO组件,需要在"工程"菜单下的"引用"项中选该组件!该组件名称为:"Mircrosoft ActiveX Data Object 2.0 Library" (注:可能有2.5 2.6 或者其他版本)

3->ADO数据访问过程概要

使用ADO访问数据库类似于高速公路,首先,必须先修好公路,建立城市与城市间的连接,汽车才能在上面运行,ADO首先也需要建立程序与数据库间的连接,然后在这个连接上执行操作.
因此ADO提供了一个连接对象,该对象负责建立与数据库的连接,因此提供了一些属性以供设置,同时也提供了建立连接的方法与相应连接相关的事件!

连接建立之后,连接对像本身也提供了数据库执行操作的方法,但要更强有力的执行SQL的功能要由另一个命令对象来实现.

此外,一个非常重要的对象是记录集对像,因为在很多时候,需要执行数据库的查询,而查询的结果返回必须以某个容器来承载,就好比高速公路运送回来的货物需要建立一个物资仓库来进行货物的接收和储存.

还需要注意的是,要求程序与数据库之间断开连接.

连接对象,命令对象,和记录集对象分别对应ADO的Connection,Command,和Recordset三个对象

4->ADO Connection对象的属性方法和事件

1.连接对象(Connection)的主要属性

属性名称 属性说明
Provider 指定要进行连接的提供程序的名称,该属性标识要进行数据连接的数据库类型
CommandTimeOut 设置或者返回产生错误之前执行命令期间需等待的时间,单位为秒
ConnectionTimeOut 设置或者返回产生错误前建立连接期间所等待的时间,单位为秒
ConnectionString 设置建立到数据源的连接的信息,不同的信息单元以";"号分割
State 说明当前连接的状态信息

主要属性说明:

A.Provider
用 Provider 属性可以设置或返回连接提供者名称,也可以通过ConnectionString属性的内容或open方法的ConnectionString参数设置该属性

例如: Con.Provider="Microsoft.Jet.OLEDB.3.51"
Con.Provider="sqloledb"
分别表示access与Sql Server的连接支持!

B.ConnectionString

例如,可以按以下方式分别设置SQL Server与Access的连接字符串信息

Con.ConnectionString="driver={SQL Server};server=SV1;uid=sa;pwd=;database=pubs"

Con.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\1.MDB"

请注意Access数据库与Sql Server数据库不同的连接方式,Access数据库需要指定具体的文件名,而Sql Server通过指定数据库名来访问

连接方式可以还可以是数据源,例如,可以使用建立的数据源连接:
Con.ConnectionString="DSN=ACCPSQL;server=SV1;uid=sa;pwd=;"

C.State

该属性是只读的,不能进行设置,返回值为adStateClosed常数表示连接已关闭,返回值adStateOpen常数表示连接是打开的

附:Provider Parameters 参数

提供程序 参数字符串
Micrusoft Jet Microsoft.Jet.OLEDB.3.51
Oracle MSDAORA
Microsoft ODBC Driver MSDASQL
SQL Server SQLOLEDB

2. vc++ 用ADO链接数据库怎么连

由于我也刚开始学,前几天找到的,好使,我试过的,有什么问题你可以问我

首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用#import引用它既可。可以直接在Stdafx.h文件中加入下面语句来实现:

#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")
其中路径名可以根据自己系统安装的ADO支持文件的路径来自行设定。当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵数LoadTypeLib()。#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。语句no_namespace说明ADO对象不使用命名空间,rename ("EOF", "adoEOF")说明将ADO中结束标志EOF改为adoEOF,以避免和其它库中命名相冲突。
其次,在程序初始过程中需要初始化组件,一般可以用CoInitialize(NULL);来实现,这种方法在结束时要关闭初始化的COM,可以用下面语句CoUnInitialize();来实现。在MFC中还可以采用另一种方法来实现初始化COM,这种方法只需要一条语句便可以自动为我们实现初始化COM和结束时关闭COM的操作,语句如下所示: AfxOleInit();
接着,就可以直接使用ADO的操作了。我们经常使用的只是前面用#import语句引用类型库时,生成的包装类.tlh中声明的智能指针中的三个,它们分别是_ConnectionPtr、_RecordsetPtr和_CommandPtr。下面分别对它们的使用方法进行介绍:
1、_ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句(用法和_CommandPtr中的Execute方法类似)。
——打开一个库连接。先创建一个实例指针,再用Open打开一个库连接,它将返回一个IUnknown的自动化接口指针。代码如下所示:

_ConnectionPtr m_pConnection;
// 初始化COM,创建ADO连接等操作
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));

// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。jingzhou xu
try
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
return FALSE;
}
——关闭一个库连接。如果连接状态有效,则用Close方法关闭它并赋于它空值。代码如下所示:

if(m_pConnection->State)
m_pConnection->Close();
m_pConnection= NULL;

3. 详细比较在ASP中通过ADO接口实现对数据库访问的三种不同格式的特点

在ASP脚本中可以通过三种方式访问数据库:

● IDC(Internet Database Connector)方式

● ADO(ActiveX Data Objects)方式

● RDS(Remote Data Service)方式

从概念上来讲,这三种访问方式对数据库的访问是由Internet Information Server来完成的。Web浏览器用HTTP协议向Internet信息服务器(IIS)递交请求。Internet信息服务器执行访问数据库的操作,并以一个HTML格式的文档作为回答。

1.Internet数据库接口(IDC)

IDC是一个传统的数据库查询工具,用来定义和执行数据库查询的SQL命令,并向浏览器返回一个指定数据格式的页面。使用IDC访问数据库最大的特点是简单,几乎不需要编程就能实现对数据库的访问。

2.ActiveX数据对象(ADO)

与IDC不同,用ADO访问数据库更类似于编写数据库应用程序,ADO把绝大部分的数据库操作封装在七个对象中,在ASP页面中编程调用这些对象执行相应的数据库操作。ADO是ASP技术的核心之一,它集中体现了ASP技术丰富而灵活的数据库访问功能。ADO建立了基于Web方式访问数据库的脚本编写模型,它不仅支持任何大型数据库的核心功能,而且支持许多数据库所专有的特性。ADO使用本机数据源,通过ODBC访问数据库。这些数据库可以是关系型数据库、文本型数据库、层次型数据库或者任何支持ODBC的数据库。ADO的主要优点是易用、高速、占用内存和磁盘空间少,所以非常适合于作为服务器端的数据库访问技术。相对于访问数据库的CGI程序而言,它是多线程的,在出现大量并发请求时,也同样可以保持服务器的运行效率,并且通过连接池(Connection Pool)技术以及对数据库连接资源的完全控制,提供与远程数据库的高效连接与访问,同时它还支持事务处理(Transaction),以开发高效率、高可靠性的数据库应用程序。

正是因为使用ADO需要编写脚本程序,所以ADO能够实现更复杂、更灵活的数据库访问逻辑。目前,ADO包括Command、Connection、Recordset等七个对象和一个动态的Properties集合,绝大部分的数据库访问任务都可以通过它们的组合来完成。

1.3 ODBC与ADO对象

1.3.1 ASP访问数据库的几种方式

3.远程数据服务(RDS)

RDS是IIS 1.0中新提出的概念,它是由ASP中原来的Advanced Data Connector(ADC)发展而来的。在IIS 1.0中,RDS与ADO集成到一起,使用同样的编程模型,提供访问远程数据库的功能。

ADO虽然能够提供非常强大的数据库访问功能,但是它不支持数据远程操作(DataRemoting)。换句话说,ADO只能执行查询并返回数据库查询的结果,这种结果是静态的,服务器上的数据库与客户端看到的数据没有“活的连接关系”。假如,客户端需要修改数据库中的数据,就必须构造修改数据的SQL语句,执行相应的查询动作。而RDS就比ADO更进一步,它支持数据远程操作。它不仅能执行查询并返回数据库查询结果,而且这种结果是“动态的”, 服务器上的数据库与客户端看到的数据保持“活的连接关系”。即把服务器端的数据搬到客户端,在客户端修改数据后,调用一个数据库更新命令,就可以将客户端对数据的修改写回数据库,就象使用本地数据库一样。

由于RDS与ADO集成,RDS的底层是调用ADO来完成的,所以也可以将RDS理解为ADO的RDS,即ActiveX数据对象的远程数据服务。RDS在ADO的基础上通过绑定的数据显示和操作控件,提供给客户端更强的数据表现力和远程数据操纵功能。可以说RDS是目前基于Web的最好的远程数据库访问方式。

以上就是ASP访问数据库的三种方式,它们三者各有各的特色。IDC十分简单,使用.idc文件和.htx文件分别完成数据库的访问与输出任务,但是使用起来不灵活。ADO是ASP中推荐使用的方式,它功能强大,使用方便,是ASP的核心技术之一,但是它在提供用户远程操作数据库的功能时,比较复杂,实现起来有一定的难度。而RDS是基于ADO的,并提供远程操作数据库的强大工具。所以在需要提供高性能、高可靠性的远程数据操作功能时,RDS是更为理想的选择。

4. 请简描述ADO.NET访问数据库的步骤

1、Connection,连接。打开数据通道。
2、Command,命令。通过连接传给数据库执行。
3、DataReader,仅向前读取器。通过连接,读取查询结果。
4、Parameter,参数。有输入也有输出,输入参数和Command结合通过连接传给数据库,输出参数在执行后由数据库返回给参数。
5、DataAdapter,适配器。将数据库映射到程序,同步更新、删除、查询、添加。结合DataSet、DataTable、DataRow、DataColumn等对象使用。
6、Transaction,事物。多个命令组合执行,一条儿失败全部回滚,也可以自己设置还原点,手动控制回滚。

5. VC++中使用ADO操作ACCESS数据库


ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。本文详细地介绍在Visual C++开发环境下如何使用ADO来进行数据库应用程序开发,并给出示例代码。为了使读者朋友都能测试本例提供的代码,我们采用Access数据库,您可以直接在我们提供的示例代码中找到这个test.mdb。程序编译运行后的效果如图一所示:
一、实现方法
万事开头难,任何一种新技术对于初学者来说最重要的还是"入门",掌握其要点。让我们来看看ADO数据库开发的基本流程吧!它的基本步骤如下:
(1)初始化COM库,引入ADO库定义文件
(2)用Connection对象连接数据库
(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。
下面我们将详细介绍上述步骤并给出相关代码。
1、COM库的初始化
我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码:
BOOL CADOTest1App::InitInstance()
{
AfxOleInit();
......
}
2、用#import指令引入ADO类型库
为了引入ADO类型库,需要在项目的stdafx.h文件中加入如下语句:
#import "c:program filescommon filessystemadomsado15.dll"
no_namespace rename("EOF","adoEOF")
这一语句有何作用呢?其最终作用同我们已经十分熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
需要读者朋友注意的是:您的开发环境中msado15.dll不一定在这个目录下,请按实际情况修改;在编译的时候可能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告:msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned。
3、创建Connection对象并连接数据库
为了首先我们需要添加一个指向Connection对象的指针_ConnectionPtr m_pConnection,下面的代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉:
BOOL CADOTest1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection-Open("Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=test.mdb","","",adModeUnknown);///连接数据库
//上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,
//需要改为:Provider=Microsoft.Jet.OLEDB.3.51;
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败! 错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
在这段代码中我们是通过Connection对象的Open方法来进行连接数据库的,下面是该方法的原型:
HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options );
上述函数中参数ConnectionString为连接字串;参数UserID是用户名;参数Password是登陆密码;参数Options是连接选项,用于指定Connection对象对数据的更新许可权,一般情况下Options可以是如下几个常量:
adModeUnknown:缺省。当前的许可权未设置
adModeRead:只读
adModeWrite:只写
adModeReadWrite:可以读写
adModeShareDenyRead:阻止其它Connection对象以读权限打开连接
adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接
adModeShareExclusive:阻止其它Connection对象以读写权限打开连接
adModeShareDenyNone:阻止其它Connection对象以任何权限打开连接
我们给出一些常用的连接方式供大家参考:
(1)通过JET数据库引擎对ACCESS2000数据库的连接:
m_pConnection-Open("Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:est.mdb","","",adModeUnknown);
(2)通过DSN数据源对任何支持ODBC的数据库进行连接:
m_pConnection-Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown);
(3)不通过DSN对SQL SERVER数据库进行连接:
m_pConnection-Open("driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;
UID=sa;PWD=139","","",adModeUnknown);
其中Server是SQL服务器的名称,DATABASE是库的名称。
Connection对象除Open()方法外还有许多方法,我们先介绍Connection对象中两个有用的属性ConnectionTimeOut与State。ConnectionTimeOut用来设置连接的超时时间,需要在Open之前调用,例如:
m_pConnection-ConnectionTimeout = 5;///设置超时时间为5秒
m_pConnection-Open("Data Source=adotest;","","",adModeUnknown);
State属性指明当前Connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如:
if(m_pConnection-State)
m_pConnection-Close(); ///如果已经打开了连接则关闭它
4、执行SQL命令并取得结果记录集
为了取得结果记录集,我们定义一个指向Recordset对象的指针:_RecordsetPtr m_pRecordset;
并为其创建Recordset对象的实例: m_pRecordset.CreateInstance("ADODB.Recordset"),SQL命令的执行可以采用多种形式,下面我们一一进行阐述。
(1)利用Connection对象的Execute方法执行SQL命令
Execute()方法的原型如下所示:
_RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options )
其中CommandText是命令字串,通常是SQL命令。参数RecordsAffected是操作完成后所影响的行数, 参数Options表示CommandText中内容的类型,Options可以取如下值之一:adCmdText表明CommandText是文本命令;adCmdTable表明CommandText是一个表名;adCmdProc表明CommandText是一个存储过程;adCmdUnknown表明CommandText内容未知。Execute()函数执行完后返回一个指向记录集的指针,下面我们给出具体代码并作说明:
_variant_t RecordsAffected;
///执行SQL命令:CREATE TABLE创建表格users,users包含四个字段:整形ID,字符串username,整形old,日期型birthday
m_pConnection-Execute("CREATE TABLE users(ID INTEGER,username
TEXT,old INTEGER,birthday DATETIME)",RecordsAffected,adCmdText);
///往表格里面添加记录
m_pConnection-Execute("INSERT INTO users(ID,username,old,birthday)
VALUES (1, 'Washington',25,񟬢/1/1')",RecordsAffected,adCmdText);
///将所有记录old字段的值加一
m_pConnection-Execute("UPDATE users SET old = old+1",RecordsAffected,adCmdText);
///执行SQL统计命令得到包含记录条数的记录集
m_pRecordset = m_pConnection-Execute("SELECT COUNT(*) FROM
users",RecordsAffected,adCmdText);
_variant_t vIndex = (long)0;
_variant_t vCount = m_pRecordset-GetCollect(vIndex);///取得第一个字段的值放入vCount变量
m_pRecordset-Close();///关闭记录集
CString message;
message.Format("共有%d条记录",vCount.lVal);
AfxMessageBox(message);///显示当前记录条数(2)利用Command对象来执行SQL命令
_CommandPtr m_pCommand;
m_pCommand.CreateInstance("ADODB.Command");
_variant_t vNULL;
vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;///定义为无参数
m_pCommand-ActiveConnection = m_pConnection;///非常关键的一句,将建立的连接赋值给它
m_pCommand-CommandText = "SELECT * FROM users";///命令字串
m_pRecordset = m_pCommand-Execute(vNULL,vNULL,adCmdText);
//执行命令取得记录集
在这段代码中我们只是用Command对象来执行了SELECT查询语句,Command对象在进行存储过程的调用中能真正体现它的作用。下次我们将详细介绍。
(3)直接用Recordset对象进行查询取得记录集,例如:
m_pRecordset-Open("SELECT * FROM users",_variant_t((IDispatch *)m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
Open()方法的原型如下:
HRESULT Recordset15::Open ( const _variant_t
Source, const _variant_t
ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options )
上述函数中参数Source是数据查询字符串;参数ActiveConnection是已经建立好的连接(我们需要用Connection对象指针来构造一个_variant_t对象);参数CursorType光标类型,它可以是以下值之一;请看这个枚举结构:
enum CursorTypeEnum
{
adOpenUnspecified = -1,///不作特别指定
adOpenForwardOnly = 0,///前滚静态光标。这种光标只能向前浏览记录集,比如用MoveNext向前滚动,这种方式可以提高浏览速度。但诸如BookMark,RecordCount,AbsolutePosition,AbsolutePage都不能使用
adOpenKeyset = 1,///采用这种光标的记录集看不到其它用户的新增、删除操作,但对于更新原有记录的操作对你是可见的。
adOpenDynamic = 2,///动态光标。所有数据库的操作都会立即在各用户记录集上反应出来。
adOpenStatic = 3///静态光标。它为你的记录集产生一个静态备份,但其它用户的新增、删除、更新操作对你的记录集来说是不可见的。
};
参数LockType表示数据库的锁定类型,它可以是以下值之一,请看如下枚举结构:
enum LockTypeEnum
{
adLockUnspecified = -1,///未指定
adLockReadOnly = 1,///只读记录集
adLockPessimistic = 2,悲观锁定方式。数据在更新时锁定其它所有动作,这是最安全的锁定机制
adLockOptimistic = 3,乐观锁定方式。只有在你调用Update方法时才锁定记录。在此之前仍然可以做数据的更新、插入、删除等动作
adLockBatchOptimistic = 4,乐观分批更新。编辑时记录不会锁定,更改、插入及删除是在批处理模式下完成。
};
参数Options的含义请参考本文中对Connection对象的Execute()方法的介绍。
5、记录集的遍历、更新
根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,更改其年龄数据,保存到数据库。
_variant_t vUsername,vBirthday,vID,vOld;
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset-Open("SELECT * FROM users",_variant_t((IDispatch*)m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
while(!m_pRecordset-adoEOF)
///这里为什么是adoEOF而不是EOF呢?还记得rename("EOF","adoEOF")这一句吗?
{
vID = m_pRecordset-GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,你也可以直接给出列的名称;
vUsername = m_pRecordset-GetCollect("username");///取得username字段的值
vOld = m_pRecordset-GetCollect("old");
vBirthday = m_pRecordset-GetCollect("birthday");
///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
if(vID.vt != VT_NULL
vUsername.vt != VT_NULL
vOld.vt != VT_NULL
vBirthday.vt != VT_NULL)
TRACE("id:%d,姓名:%s,年龄:%d,生日:%s ",vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday);
m_pRecordset-MoveNext();///移到下一条记录
}
m_pRecordset-MoveFirst();///移到首条记录
m_pRecordset-Delete(adAffectCurrent);///删除当前记录
///添加三条新记录并赋值
for(int i=0;i3;i++)
{
m_pRecordset-AddNew();///添加新记录
m_pRecordset-PutCollect("ID",_variant_t((long)(i+10)));
m_pRecordset-PutCollect("username",_variant_t("叶利钦"));
m_pRecordset-PutCollect("old",_variant_t((long)71));
m_pRecordset-PutCollect("birthday",_variant_t("1930-3-15"));
}
m_pRecordset-Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
m_pRecordset-PutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄
m_pRecordset-Update();///保存到库中
6、关闭记录集与连接
记录集或连接都可以用Close()方法来关闭:
m_pRecordset-Close();///关闭记录集
m_pConnection-Close();///关闭连接
至此,我想读者朋友已经熟悉了ADO操作数据库的大致流程,也许您已经胸有成竹,也许您还有点胡涂,不要紧!建议你尝试写几个例子,这样会更好地熟悉ADO,最后我给大家写了一个小例子,例子实现的功能是读出所有记录并放到列表控件中,同时可以添加、删除、修改记录。
二、编程步骤
1、 启动Visual C++6.0,生成一个基于对话框的应用程序,将该程序命名为ADOTest1;
2、 在对话框界面上放置显示记录列表控件和添加、删除记录用的的编辑、按钮控件,具体设置参加代码中的对话框资源部分;
3、 使用Class Wizard为添加、修改数据库记录的按钮添加消息响应函数;
4、 添加成程序代码,编译运行程序。

热点内容
存储空间不足某些系统功能 发布:2024-10-16 17:59:24 浏览:240
你是怎么做资产配置的 发布:2024-10-16 17:58:46 浏览:869
南京社保原始密码是什么 发布:2024-10-16 17:58:00 浏览:917
为什么叫波斯密码 发布:2024-10-16 17:42:16 浏览:371
linux文件共享samba 发布:2024-10-16 17:41:30 浏览:825
有密码的压缩文件 发布:2024-10-16 17:28:19 浏览:726
115浏览器视频缓存 发布:2024-10-16 17:22:59 浏览:674
家里密码锁忘记了如何设置新密码 发布:2024-10-16 17:21:28 浏览:98
如何清除微信浏览器缓存 发布:2024-10-16 17:07:19 浏览:596
安卓转苹果为什么要付99块钱 发布:2024-10-16 16:43:57 浏览:122