数据库连接问题

数据库连接问题,第1张

我们需要引用ADO具体的方法是,在"工程" -- "引用" 中,找到"Microsoft ActiveX Data Object Library",这里的""是指的时ADO的版本号,一般来说,应用程序或ActiveX控件都具有向下兼容性,所以我们尽可能选择比较新的版本以确保程序在能识别旧版本Access的同时,也能识别较新版本的Access

然后我们需要在程序中创建一个对象就好比我们在窗体上添加一个FileBox才能看到文件名一样,只有创建了ADO对象,我们才能够访问数据库常用的对象有两个,Connection和Recordset

创建这两个对象的具体方法是:

1在引用后,使用New关键字,如

Private Conn As New ADODBConnection

Private Reco As New ADODBRecordset

2在没引用时,用CreateObject创建对象:

Dim Conn,Reco

Set Conn = CreateObject("ADODBConnection")

Set Reco = CreateObject("ADODBRecordset")

创建了对象之后,下一步我们要做的就是打开数据库了

先看下面的代码,可以成功的打开数据库

Connopen "Provider=MicrosoftJetOLEDB40;Data Source=D:\Mainmdb"

这句代码打开了D盘中的Mainmdb这个数据库

ConnectionOpen方法的第一个参数是连接代码,它将传递给系统的数据库引擎前半部分"Provider= MicrosoftJetOLEDB40",它表示了数据库的类型不同的数据库可能会不同后半句"Source=d:\mainmdb"它表示了数据库所在的绝对路径

打开数据库之后,还要打开表假如数据库中有一个表,表名为"Users",字段有两个,一个为用户名,一个为密码那么看以下代码

1想返回"Users"中,[用户名]为"去年烟花"的[密码]

Recordsetopen "Select 密码 From Users Where 用户名='去年烟花'",Connection,1,1

之后我们就可以把用户输入的密码进行比较,看是否允许登录

If Recordseteof and Recordsetbof then

Msgbox "用户不存在!",16

Else

If PassWord =Recordset("密码")value then

msgbox "登录成功!",64

Else

msgbox "密码错误!",32

End If

End If

RecordsetClose

2假设Admin已经成功登录系统,我们想把所有的用户名和密码都显示出来

Recordsetopen "Select From Users",Connection,1,1

这时,表已经被打开,我们就用以下代码把它显示出来

Do whlie Not Recordseteof

Print "用户名: " & Recordset("用户名")value & "密码: " & Recordset("密码")value

RecordsetMoveNext

Loop

RecordsetClose

由以上代码示例可以看出,打开表时,可以只打开其中的一个字段,也可以打开所有第一个参数是SQL语句

Select [字段名] From 表名 [Where 条件]

这里的条件可以省略且字段名也可以用""来代替所有字段

需要注意的是,如果你用(1)中的方法打开,那么(2)后面显示的代码就不能再用在(1)中因为(1)里并没有打开[用户名]字段,所以这一句Recordset("密码")就没有值存在,还有可能出错

后面的条件,可以用"="、">"、"<"等运算符比如 "Where ID > 32"(这里假设[ID]为数字型)

这是打开的部分第二个很重要的部分就是查询记录

数据库它并不是把所有记录全部放到一个变量中备用的而是以"当前记录"的形式来返回一个值所以我们想从中找到有用的信息,就必须要对信息进行定位/筛选

定位:

移动到下一条 RecordsetMoveNext

移动到上一条 RecordsetMovePrevious

移动到最后一条 RecordsetMoveLast

移动到第一条 RecordsetMoveFrist

移动到某一条 RecordsetMove Number

筛选:

RecordsetFind "条件"

如:[用方法(2)打开表之后]

Private Sub Command1_Click()

RecordsetFind "用户名=" & "text1text"

If RecordsetEof <> True Then

Msgbox "该用户的密码是:" & Recordset("密码")value,64

Else

Msgbox "未找到该用户的资料!",16

End If

End Sub

MoveNext 只有当Eof不为True时,才可用,否则发生错误而MovePrevious刚是Bof不为True时

而只要Eof 和 Bof中有一个不为真时,也就是说只要有一条记录时,它就可以使用

Find 方法中的条件和Open时的第一个参数中的条件表述方法是完全一致的当在已打开的记录集中,找不到该记录时,Eof为True找到则当前的值就是符合条件的记录

第三个部分就是添加/修改记录

修改记录很简单,先按以上的方法找到相关记录之后,给记录赋值就可以了

比如:[(修改密码)按方法(1)打开表之后]

Recordset("密码")value = "123456"

RecordsetUpdata

需要注意的就是,在修改完成后,要调用Updata方法,这样修改才能生效

而添加记录则可以用以下代码来实现:

Recordsetaddnew

Recordset("用户名")value = "Admin"

Recordset("密码")value = "Admin"

RecordsetUpdata

这里,先要调用Addnew方法,增加一条新记录,然后对这个新记录中的各字段赋值,最后再调用Updata方法

到这里就差不多了,最后说一下上面提到的几个方法

RecordsetOpen SQL语句,数据源,游标类型,打开方法

SQL语句不用说了,就是Select那啥的,目的就是按要求从表中返回数据

数据源就是一个打开之后的Connection对象

去他妈的游标类型,填1就可以了 [偷笑ing]

打开方法对应了几个常数,具体哪几个可以从对象浏览器里看

对应数值的意义:

1 只读 2 独占 3 可写 4 自已可写,别人可读

Connectionopen 连接代码,服务器用户名,密码

这里的连接代码就不在多说了,服务器用户名,密码只有在连接远程数据库时才用到

是相同的属性组即要求必须有相同的值域即可自然连接。

自然连接是一种特殊的等值连接,他要求两个关系表中进行比较的必须是相同的属性列,无须添加连接条件,并且在结果中消除重复的属性列。

在连接运算当中,一种最常用的连接是自然连接。如果关系R与S具有相同的属性组B,且该属性组的值相等时的连接称为自然连接,结果关系的属性集合为R的属性并上S减去属性B的属性集合。

R和S自然连接可记作:R⋈S={t r⌒ts |tr∈R∧ts∈S∧tr[A]=ts[B]}[3]

自然连接也可看作是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。

自然连接与等值连接的区别

1 等值连接中不要求属性值完全相同,而自然连接要求两个关系中进行比较的必须是相同的属性组(属性名可以不同),即要求必须有相同的值域。

2 等值连接不将重复属性去掉,而自然连接去掉重复属性,也可以说,自然连接是去掉重复列的等值连接。

自然连接外连接

如果把舍弃的元组也保存在结果关系中,而在其他属性上空值,那么这种连接就叫外连接。如果只把左边关系R要舍弃的元组保留就叫左外连接,如果只把右边关系S中要舍弃的元组保留右外连接。

第一种方法:直接通过数据库的用户名、密码等连接到数据库进行数据库连接。

如:private void sqlconn()

{

SqlConncetion conn = new SqlConnection("SERVER=;DATABASE=pubs;PWD=;UID=sa;");

SqlConncetion cmd = new SqlCommand("SELECTFROM [table]",cmd);

DataSet ds = new DataSet();

SqlDataAdapter adp = new SqlDataAdapter(cmd);

adpFill(ds);

}

其中SqlConnection 是数据库连接类,SqlDataAdapter是数据适配器,SqlCommand是数据 *** 作命令,即执行SQL语言。

说明,使用SqlConnection进行数据库的连接,然后使用SqlCommand定义SQL查询语句,再定义一个DataSet存储查询的结果,而SqlDataAdapter是数据库和DataSet的转换桥梁。

第二种方法:通过ConfigurationManagerConnectionString获取数据库的配置信息。进行数据库的连接。

如:public static int ExcuteNonQuery(string sql,params SqlParameter[] parameters)

{

string connStr = configurationManagerConnectionStrings["ConnStr"]ConncetionString;

using(SqlConncetion conn=new SqlConnection(connStr))

{

connopen();

using(SqlCommand cmd = connCreateCommand())

{

cmdCommandText = sql;

foreach(SqlParameter parameter in parameters)

{

cmdParametersAdd(parameter);

}

return cmdExecuteNonQuery();

}

}

}

说明:

(1) 通过string connStr=ConfigurationManagerConnectionString[“ConnStr”]ConnectionString;获得数据库连接的一些配置信息,即“数据源”、“数据库名”、“用户名”、“密码”,将这些信息都保存在connStr中。

(2) SqlConnection conn = new SqlConnection(connStr);创建一个数据库连接对象conn,连接数据库用connOpen();

(3) SqlCommand cmd = new SqlCommand(“Select Form [表]”,conn);

或者string sql = “Select From [表]”;

SqlCommand cmd = connCreateCommand();

cmdCommandText = sql;这样就把访问数据库的SQL语句存到了cmd中

(4) 建立SqlDataAdapter对象和DataSet对象

DataSet myDataSet = new DataSet();创建DataSet对象,

SqlDataAdapter myDataAdapter = new SqlDataAdapter(cmd);创建数据适配器对象。

(5) 填充DataSet:myDataAdapterFill(myDataSet);其实SqlDataAdapter数据适配器起的就是一个连接数据库和数据集(DataSet)的桥梁作用,把对数据库 *** 作的SQL语句得到的结果传到SqlDataAdapter对象中,在通过SqlDataAdapterFill(DataSet)方法,将结果填充到DataSet中。

第三种方法:用工厂方法

DbProviderFactory m_dbProviderFactory = DbProviderFactoriesGetFacory(ConfigurationManagerConnectionString[“ConStr”]ProviderName);//获取工厂

DbConnection conn = m_dbProviderFactoryCreateConncetion();//创建连接

DbCommand cmd = m_dbProviderFactoryCreateCommand();//创建命令

cmdConnection = conn;

cmdCommandText = strSql;

cmdCommandType = CommandTypeText;

DbDataAdapter dapter = m_dbProviderFactoryCreateDataAdapter();//创建适配器

dapterSelectCommand = cmd;

dapterFill(DataSet ds = new DataSet());//填充

return ds;

说明:

上面的语句中用ConfigurationManagerConnectionString[“ConStr”]ProviderName获取了当前数据库的名称,因此可以适用于任何数据库,如果这样写,就是不同的数据库使用不同的语言:

SqlServer:DbProviderFactory factory = DbProviderFactoriesGetFactory("SystemDataSqlClient");

Oracle:DbProviderFactory factory = DbProviderFactoriesGetFactory("SystemDataOracleClient");

ODBC:DbProviderFactory factory = DbProviderFactoriesGetFactory("SystemDataOdbc");

Access:DbProviderFactory factory = DbProviderFactoriesGetFactory("SystemDataOleDb");

内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。

右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。

全外连接:左外连接 union 右外连接。

示例:

数据库版本:Oracle

表TESTA,TESTB,TESTC,各有A, B两列。

A.内连接

内连接,即最常见的等值连接,例:

SELECT  

FROM TESTA,TESTB

WHERE TESTAA=TESTBA

结果:

B外连接

外连接分为左外连接,右外连接和全外连接。

1.  左外连接 left outer join 或者 left join

左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:

SELECT 

FROM TESTA 

LEFT OUTER JOIN TESTB 

ON TESTAA=TESTBA

结果:

三个表做左外链接:

SELECT 

FROM TESTA 

LEFT OUTER JOIN TESTB 

ON TESTAA=TESTBA

LEFT OUTER JOIN TESTC

ON TESTAA=TESTCA

结果:

2. 右外连接 right outer join 或者 right join

右外连接是在等值连接的基础上加上被连接表的不匹配数据

SELECT 

FROM TESTA 

RIGHT OUTER JOIN TESTB 

ON TESTAA=TESTBA

3全外连接 full outer join 或者 full join

全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上。

SELECT  

FROM TESTA 

FULL OUTER JOIN TESTB

ON TESTAA=TESTBA

结果:

看到你说将DataGrid和数据库连接,不知道你用的是不是asp或者aspnet软件,如果是这两个软件的话,如果是在设计页面用控件 *** 作的话,应该是先添加一个DataSource控件,在这个控件里设置好要连的数据库路径,接着选择要显示的表的具体列的数据。然后再添加一个DataGrid控件,将DataGrid控件里的DataSource这个属性等于之前的DataSource控件的ID就可以了。

你问的那个pwd是你数据库的密码,看你有没有设定了。

我贴一段其他数据控件的例子你看看:

//前四个等号分别是你新建的数据库连接的名字,你要连接的数据库的路径,数据库软件你的用户名,用户密码

这段是连接数据库的代码。

="

Conn%>"

//这是在你的软件已经建好数据库的连接下使用的

="SELECT

TB_“

这段是选择已经建好的数据库连接的代码。

这段是GridView控件绑定数据的代码

SqlDataAdapter是

DataSet和

SQL

Server之间的桥接器,用于检索和保存数据;所以应该用Fill

方法填充到

Dataset

之后

再做判断

以上就是关于数据库连接问题全部的内容,包括:数据库连接问题、数据库自然连接、c#连接数据库的几种方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10184067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存