能向你求助一下如何连接数据库么?

能向你求助一下如何连接数据库么?,第1张

抱歉,很长时间没有登录了,才看到。

连接数据库按照验证方式分两种:

1、本地验证模式( *** 作系统的登录用户必须是oracle数据库软件的管理组重的一员),这个时候可以不必加描述符,只需要用户名密码即可。

例如:

sqlplus dexter/xiaojun

sqlplus / as sysdba

2、远程验证模式

就是通常我们远程连接数据库的时候使用的方式,使用sqlplus就是:

sqlplus 用户名/密码@IP地址:监听端口号/servicename(或sid)

远程连接的时候可以使用如上的ezconnect方式,也可以先在tnsname.ora中定义好连接描述符。

例如我的tnsnames.ora文件中有如下内容:

FINALLY =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.7.0.88)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = finally)

)

)

那么我要连接ip为10.7.0.88,端口号是1521,注册在服务器监听上的service为finally的实例,数据库用户名为dexter,密码为xiaojun。sqlplus就可以这么写:

sqlplus dexter/xiaojun@finally

选项

SQL Server

指定要连接的 SQL Server 实例的名称。在 Microsoft Windows NT? 中,必须具有要求的系统权限和权利,才能在本地或远程启动 SQL Server。在运行 Microsoft Windows? 95 或 Windows 98 *** 作系统的计算机上,每个用户可在本地启动 SQL Server。 *** 作系统能防止用户远程启动 SQL Server。

启动 SQL Server(如果它是停止的)

启动 SQL Server 的一个实例(如果它是停止的)。

(...)

显示网络中活动 SQL Server 数据库服务器列表。此列表只显示运行于 Windows NT 平台的 SQL Server 实例。该功能不适用于运行 Microsoft Windows 95 或 Windows 98 *** 作系统的计算机。

通过下列方式连接:

指定在连接到数据库服务器时,所采用的身份验证方式。

Windows NT 身份验证 指定 SQL Server 使用 Windows NT 用户信息来验证用户身份。此选项只有连接到运行于 Windows NT 的 SQL Server 实例时才可用。客户必须属于 Windows NT 域或者工作组的一部分。用户须经 Windows NT 用户身份验证后才能被授予访问权。

SQL Server 身份验证 指定使用标准 SQL Server 安全验证。对于 Microsoft Windows 95 或 Windows 98 *** 作系统上的 SQL Server 实例,该选项是默认值且是唯一的可用选项。对于 Windows NT 上的 SQL Server 实例,该选项是可选选项。用户只有在向 SQL Server 注册登录资料后,才能进行登录。

登录名 指定 SQL Server 认可的登录。

密码 指定登录名所用的密码。

Windows身份验证和SQL Server 身份验证就是要你出示下证件。

Windows身份验证就是出示windows账户的身份。

SQL Server 身份验证是SQL Server自己的一套验证机制。

不同的身份登录,权限是不一样的。

比如常说的SA,是管理员身份,权限相比普通身份就比较高。

选取SQL Server 登录时,要在SQL Server(S)栏处打入:(local)

说明是连接本地服务器,然后再打入你的 登录名和密码,你当初安装SQL Server时设置的登录名sa,和密码。

本文将详细介绍如何使用Connection对象连接数据库。对于不同的.NET数据提供者,ADO.NET采用不同的Connection对象连接数据库。这些Connection对象为我们屏蔽了具体的实现细节,并提供了一种统一的实现方法。

Connection类有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection。

SqlConnection类的对象连接SQL Server数据库;OracleConnection 类的对象连接Oracle数据库;

OleDbConnection类的对象连接支持OLE DB的数据库,如Access;而OdbcConnection类的对象连接任何支持ODBC的数据库。与数据库的所有通讯最终都是通过Connection对象来完成的。

SqlConnection类

Connection 用于与数据库“对话”,并由特定提供程序的类(如 SqlConnection)表示。尽管SqlConnection类是针对Sql Server的,但是这个类的许多属性、方法与事件和OleDbConnection及OdbcConnection等类相似。本章将重点讲解SqlConnection特定的属性与方法,其他的Connection类你可以参考相应的帮助文档。

注意:使用不同的Connection对象需要导入不同的命名空间。OleDbConnection的命名空间为System.Data.OleDb。SqlConnection的命名空间为System.Data.SqlClient。OdbcConnection的命名空间为System.Data.Odbc。OracleConnection的命名空间为System.Data.OracleClinet。

SqlConnection属性:

属性 说明

ConnectionString 其返回类型为string,获取或设置用于打开 SQL Server 数据库的字符串

ConnectionTimeOut 其返回类型为int,获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。

Database 其返回类型为string,获取当前数据库或连接打开后要使用的数据库的名称。

DataSource 其返回类型为string,获取要连接的 SQL Server 实例的名称。

State 其返回类型为ConnectionState,取得当前的连接状态:Broken、Closed、Connecting、Fetching或Open。

ServerVersion 其返回类型为string,获取包含客户端连接的 SQL Server 实例的版本的字符串。

PacketSize 获取用来与 SQL Server 的实例通信的网络数据包的大小(以字节为单位)。这个属性只适用于SqlConnection类型

SqlConnection方法:

方法 说明

Close() 其返回类型为void,关闭与数据库的连接。

CreateCommand() 其返回类型为SqlCommand,创建并返回一个与 SqlConnection 关联的 SqlCommand 对象。

Open() 其返回类型为void,用连接字符串属性指定的属性打开数据库连接

SqlConnection事件:

事件 说明

StateChange 当事件状态更改时发生。 (从 DbConnection 继承。)

InfoMessage 当 SQL Server 返回一个警告或信息性消息时发生。

提示:可以用事件让一个对象以某种方式通知另一对象产生某些事情。例如我们在Windows系统中选择“开始”菜单,一旦单击鼠标时,就发生了一个事件,通知 *** 作系统将“开始”菜单显示出来。

使用SqlConnection对象连接SQL Server数据库

我们可以用SqlConnection()构造函数生成一个新的SqlConnection对象。这个函数是重载的,即我们可以调用构造函数的不同版本。SqlConnection()的构造函数如下表所示:

构造函数 说明

SqlConnection () 初始化 SqlConnection 类的新实例。

SqlConnection (String) 如果给定包含连接字符串的字符串,则初始化 SqlConnection 类的新实例。

假设我们导入了System.Data.SqlClient命名空间,则可以用下列语句生成新的SqlConnection对象:

SqlConnection mySqlConnection = new SqlConnection()

程序代码说明:在上述语法范例的程序代码中,我们通过使用“new“关键字生成了一个新的SqlConnection对象,并且将其命名为mySqlConnection。

现在我们就可以使用如下两种方式连接数据库,即采用集成的Windows验证和使用Sql Server身份验证进行数据库的登录。

集成的Windows身份验证语法范例

string connectionString="server=localhostdatabase=Northwind

integrated security=SSPI"

程序代码说明:在上述语法范例的程序代码中,我们设置了一个针对Sql Server数据库的连接字符串。其中server表示运行Sql Server的计算机名,由于在本书中,ASP.NET程序和数据库系统是位于同一台计算机的,所以我们可以用localhost取代当前的计算机名。database表示所使用的数据库名,这里设置为Sql Server自带的一个示例数据库--Northwind。由于我们希望采用集成的Windows验证方式,所以设置 integrated security为SSPI即可。

Sql Server 2005中的Windows身份验证模式如下:

注意:在使用集成的Windows验证方式时,并不需要我们输入用户名和口令,而是把登录Windows时输入的用户名和口令传递到Sql Server。然后Sql Server检查用户清单,检查其是否具有访问数据库的权限。而且数据库连接字符串是不区分大小写的。

采用Sql Server身份验证的语法范例

string connectionString = "server=localhostdatabase=Northwinduid=sapwd=sa"

程序代码说明:在上述语法范例的程序代码中,采用了使用已知的用户名和密码验证进行数据库的登录。uid为指定的数据库用户名,pwd为指定的用户口令。为了安全起见,一般不要在代码中包括用户名和口令,你可以采用前面的集成的Windows验证方式或者对Web.Config文件中的连接字符串加密的方式提高程序的安全性。

Sql Server 2005中的Sql Server身份验证模式如下:

如果你使用其他的数据提供者的话,所产生的连接字符串也具有相类似的形式。例如我们希望以OLE DB的方式连接到一个Oracle数据库,其连接字符串如下:

string connectionString = "data source=localhostinitial catalog=Sales

use id=sapassword=provider=MSDAORA"

程序代码说明:在上述语法范例的程序代码中,通过专门针对Oracle数据库的OLE DB提供程序,实现数据库的连接。data source 表示运行Oracle数据库的计算机名,initial catalog表示所使用的数据库名。provider表示使用的OLE DB提供程序为MSDAORA。

Access数据库的连接字符串的形式如下:

string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;

@”data source=c:\DataSource\Northwind.mdb”

程序代码说明:在上述语法范例的程序代码中,通过专门针对Access数据库的OLE DB提供程序,实现数据库的连接。这使用的的OLE DB提供程序为Microsoft.Jet.OLEDB.4.0,并且数据库存放在c:\DataSource目录下,其数据库文件为Northwind.mdb。

现在我们就可以将数据库连接字符串传人SqlConnection()构造函数,例如:

string connectionString = "server=localhostdatabase=Northwinduid=sapwd=sa"

SqlConnection mySqlConnection = new SqlConnection(connectionString)

或者写成

SqlConnection mySqlConnection =new SqlConnection(

"server=localhostdatabase=Northwinduid=sapwd=sa")

在前面的范例中,通过使用“new“关键字生成了一个新的SqlConnection对象。因此我们也可以设置该对象的ConnectionString属性,为其指定一个数据库连接字符串。这和将数据库连接字符串传人SqlConnection()构造函数的功能是一样的。

SqlConnection mySqlConnection = new SqlConnection()

mySqlConnection.ConnectionString = "server=localhostdatabase=Northwinduid=sapwd=sa"

注意:只能在关闭Connection对象时设置ConnectionString属性。

打开和关闭数据库连接

生成Connection对象并将其设置ConnectionString属性设置为数据库连接的相应细节之后,就可以打开数据库连接。为此可以调用Connection对象的Open()方法。其方法如下:

mySqlConnection.Open()

完成数据库的连接之后,我们可以调用Connection对象的Close()方法关闭数据库连接。例如:

mySqlConnection.Close()

下面是一个显示如何用SqlConnection对象连接Sql Server Northwind数据库的实例程序,并且显示该SqlConnection对象的一些属性。

范例程序代码如下:

01 public partial class _Default : System.Web.UI.Page

02 {

03 protected void Page_Load(object sender, EventArgs e)

04 {

05 //建立数据库连接字符串

06 string connectionString = "server=localhostdatabase=Northwind

07 integrated security=SSPI"

08 //将连接字符串传入SqlConnection对象的构造函数中

09 SqlConnection mySqlConnection = new SqlConnection(connectionString)

10 try

11 {

12 //打开连接

13 mySqlConnection.Open()

14 //利用label控件显示mySqlConnection对象的ConnectionString属性

15 lblInfo.Text = "<b>mySqlConnection对象的ConnectionString属性为:<b>" +

16 mySqlConnection.ConnectionString + "<br>"

17 lblInfo.Text += "<b>mySqlConnection对象的ConnectionTimeout属性为<b>" +

18 mySqlConnection.ConnectionTimeout + "<br>"

19 lblInfo.Text += "<b>mySqlConnection对象的Database属性为<b>" +

20 mySqlConnection.Database + "<br>"

21 lblInfo.Text += "<b>mySqlConnection对象的DataSource属性为<b>" +

22 mySqlConnection.DataSource + "<br>"

23 lblInfo.Text += "<b>mySqlConnection对象的PacketSize属性为<b>" +

24 mySqlConnection.PacketSize + "<br>"

25 lblInfo.Text += "<b>mySqlConnection对象的ServerVersion属性为<b>" +

26 mySqlConnection.ServerVersion + "<br>"

27 lblInfo.Text += "<b>mySqlConnection对象的当前状态为<b>" +

28 mySqlConnection.State + "<br>"

29 }

30 catch (Exception err)

31 {

32 lblInfo.Text = "读取数据库出错"

33 lblInfo.Text += err.Message

34 }

35 finally

36 {

37 //关闭与数据库的连接

38 mySqlConnection.Close()

39 lblInfo.Text += "<br><b>关闭连接后的mySqlConnection对象的状态为:</b>"

40 lblInfo.Text += mySqlConnection.State.ToString()

41 }

42 }

43 }

程序代码说明:在上述范例的程序代码中,我们利用try catch finally对数据库连接进行异常处理。当无法连接数据库时将抛出异常,并显示出错信息,见catch代码块所示。在此程序中,无论是否发生异常,都可以通过finally区块关闭数据库的连接,从而节省计算机资源,提高了程序的效率和可扩展性。

执行结果:

当然,我们还可以采用一种更加简便的方法来实现上述程序的功能。这就是将SqlConnection对象包含到using区块中,这样程序会自动调用Dispose()方法释放SqlConnection对象所占用的系统资源,无需再使用SqlConnection对象的Close()方法。

范例程序代码如下:

01 public partial class _Default : System.Web.UI.Page

02 {

03 protected void Page_Load(object sender, EventArgs e)

04 {

05 string connectionString = "server=localhostdatabase=Northwind

06 integrated security=SSPI"

07 SqlConnection mySqlConnection = new SqlConnection(connectionString)

08 using (mySqlConnection)

09 {

10 mySqlConnection.Open()

11 lblInfo.Text = "<b>mySqlConnection对象的ConnectionString属性为:<b>" +

12 mySqlConnection.ConnectionString + "<br>"

13 lblInfo.Text += "<b>mySqlConnection对象的ConnectionTimeout属性为<b>" +

14 mySqlConnection.ConnectionTimeout + "<br>"

15 lblInfo.Text += "<b>mySqlConnection对象的Database属性为<b>" +

16 mySqlConnection.Database + "<br>"

17 lblInfo.Text += "<b>mySqlConnection对象的DataSource属性为<b>" +

18 mySqlConnection.DataSource + "<br>"

19 lblInfo.Text += "<b>mySqlConnection对象的PacketSize属性为<b>" +

20 mySqlConnection.PacketSize + "<br>"

21 lblInfo.Text += "<b>mySqlConnection对象的ServerVersion属性为<b>" +

22 mySqlConnection.ServerVersion + "<br>"

23 lblInfo.Text += "<b>mySqlConnection对象的当前状态为<b>"+

24 mySqlConnection.State + "<br>"

25 }

26 lblInfo.Text += "<br><b>关闭连接后的mySqlConnection对象的状态为:</b>"

27 lblInfo.Text += mySqlConnection.State.ToString()

28 }

29 }

程序代码说明:在上述范例的程序代码中,采用using(mySqlConnection)的形式使得代码更加简洁,并且其最大的优点就是无需编写finally区块代码,可以自动关闭与数据库的连接。

连接池

打开与关闭数据库都是比较耗时的。为此,ADO.NET自动将数据库连接存放在连接池中。连接池可以大幅度提高程序的性能和效率,因为我们不必等待建立全新的数据库连接过程,而是直接利用现成的数据库连接。注意,利用Close()方法关闭连接时,并不是实际关闭连接,而是将连接标为未用,放在连接池中,准备下一次复用。

如果在连接字符串中提供相同的细节,即相同的数据库,用户名,密码等等,则可以直接取得并返回池中的连接。然后可以用这个连接访问数据库。

使用SqlConnection对象时,可以在连接字符串中指定max pool size,表示连接池允许的最大连接数(默认为100),也可以指定min pool size表示连接池允许的最小连接数(默认为0)。下面的代码指定了SqlConnection对象的max pool size为10,min pool size为5。

SqlConnection mySqlConnection = new SqlConnection("server=localhostdatabase=Northwind

integrated security=SSPI"+"max pool size=10min pool size=5")

程序代码说明:在上述范例的程序代码中,程序最初在池中生成5个SqlConnection对象。池中可以存储最多10个SqlConnection对象。如果要打开新的SqlConnection对象时,池中的对象全部都在使用中,则请求要等待一个SqlConnection对象关闭,然后才可以使用新的SqlConnection对象。如果请求等待时间超过ConnectionTimeout属性指定的秒数,则会抛出异常。

下面通过一个程序来显示连接池的性能优势。在应用此程序过程我们要先引用System.Data.SqlClinet和System.Text命名空间。

范例程序代码如下:

01 public partial class _Default : System.Web.UI.Page

02 {

03 protected void Page_Load(object sender, EventArgs e)

04 {

05 //设置连接池的最大连接数为5,最小为1

06 SqlConnection mySqlConnection =new SqlConnection(

07 "server=localhostdatabase=Northwindintegrated security=SSPI"+

08 "max pool size=5min pool size=1")

09 //新建一个StringBuilder对象

10 StringBuilder htmStr = new StringBuilder("")

11 for (int count = 1count <= 5count++)

12 {

13 //使用Append()方法追加字符串到StringBuilder对象的结尾处

14 htmStr.Append("连接对象 "+count)

15 htmStr.Append("<br>")

16 //设置一个连接的开始时间

17 DateTime start = DateTime.Now

18 mySqlConnection.Open()

19 //连接所用的时间

20 TimeSpan timeTaken = DateTime.Now - start

21 htmStr.Append("连接时间为 "+timeTaken.Milliseconds+"毫秒")

22 htmStr.Append("<br>")

23 htmStr.Append("mySqlConnection对象的状态为" + mySqlConnection.State)

24 htmStr.Append("<br>")

25 mySqlConnection.Close()

26 }

27 //将StringBuilder对象的包含的字符串在label控件中显示出来

28 lblInfo.Text = htmStr.ToString()

29 }

30 }

程序代码说明:在上述范例的程序代码中,我们将在连接池中重复5次打开一个SqlConnection对象,DateTime.Now表示当前的时间。timeTaken表示从连接开始到打开连接所用的时间间隔。可以看出,打开第一个连接的时间比打开后续连接的时间要长,因为第一个连接要实际连接数据库。被关闭之后,这个连接存放在连接池中。再次打开连接时,只要从池中直接读取即可,速度非常快。

提示:String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。

在ASP.NET 2.0中,使用了一种在运行时解析为连接字符串值的新的声明性表达式语法,按名称引用数据库连接字符串。连接字符串本身存储在 Web.config 文件中的 <connectionStrings> 配置节下面,以便易于在单个位置为应用程序中的所有页进行维护。

范例程序代码如下:

<?xml version="1.0"?>

<configuration>

<connectionStrings>

<add name="Pubs" connectionString="Server=localhost

Integrated Security=TrueDatabase=pubsPersist Security Info=True"

providerName="System.Data.SqlClient" />

<add name="Northwind" connectionString="Server=localhost

Integrated Security=TrueDatabase=NorthwindPersist Security Info=True"

providerName="System.Data.SqlClient" />

</connectionStrings>

<system.web>

<pages styleSheetTheme="Default"/>

</system.web>

</configuration>

程序代码说明:在上述范例的程序代码中,我们在Web.Config文件中的<connectionStrings> 配置节点下面设置了两个数据库连接字符串,分别指向pubs和Northwind两个示例数据库。注意,在2.0中引进了数据源控件,例如SqlDataSource 控件,我们可以将SqlDataSource 控件的 ConnectionString 属性被设置为表达式 <%$ ConnectionStrings:Pubs %>,该表达式在运行时由 ASP.NET 分析器解析为连接字符串。还可以为SqlDataSource 的 ProviderName 属性指定一个表达式,例如 <%$ ConnectionStrings:Pubs.ProviderName %>。其具体的用法和新特征将在以后的章节进行详细的介绍。现在有个基础的了解即可。

当然,我们也可以用下面的方式从配置文件直接读取数据库连接字符串。首先我们需要引用using System.Web.Configuration命名空间,该命名空间包含用于设置 ASP.NET 配置的类。

string connectionString =ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString

程序代码说明:在上述范例的程序代码中,我们可以利用ConnectionStrings["Northwind"]读取相应的Northwind字符串。同理以可以利用ConnectionStrings["Pubs"]读取相应的Pubs字符串。


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

原文地址: https://outofmemory.cn/sjk/6648767.html

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

发表评论

登录后才能评论

评论列表(0条)

保存