日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
「C語言如何獲取數(shù)據(jù)庫名?」(c獲取數(shù)據(jù)庫名)

C語言作為一門廣泛使用的編程語言,可以與多種數(shù)據(jù)庫進(jìn)行交互,其中就包括MySQL、Oracle、PostgreSQL等。但是在使用C語言操作數(shù)據(jù)庫時(shí),需要首先獲取數(shù)據(jù)庫名,才能進(jìn)行后續(xù)的操作。那么,C語言如何獲取數(shù)據(jù)庫名呢?本文將為大家詳細(xì)介紹。

一、什么是數(shù)據(jù)庫名

在介紹C語言如何獲取數(shù)據(jù)庫名前,先來簡(jiǎn)單介紹一下數(shù)據(jù)庫名的概念。數(shù)據(jù)庫名即為指定的數(shù)據(jù)庫的名稱,是在數(shù)據(jù)庫創(chuàng)建時(shí)設(shè)置的。數(shù)據(jù)庫名稱是用于區(qū)分不同數(shù)據(jù)庫的字符串標(biāo)識(shí),通過數(shù)據(jù)庫名稱,我們可以輕松地連接到指定的數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)操作。

二、C語言連接數(shù)據(jù)庫

在使用C語言連接數(shù)據(jù)庫時(shí),需要先通過相應(yīng)的API庫連接到數(shù)據(jù)庫,其中需要傳入數(shù)據(jù)庫的名稱。不同的數(shù)據(jù)庫連接方式,其API庫也不盡相同。常見的API庫包括MySQL Connector/C、Oracle OCI、PostgreSQL libpq等。例如,連接MySQL數(shù)據(jù)庫可以使用MySQL Connector/C庫函數(shù)mysql_real_connect(),函數(shù)原型如下:

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);

其中,參數(shù)db即為數(shù)據(jù)庫名稱,可以指定要連接的數(shù)據(jù)庫。而在通過其他數(shù)據(jù)庫連接方式連接數(shù)據(jù)庫時(shí),也需要傳入數(shù)據(jù)庫名稱參數(shù)。

三、獲取數(shù)據(jù)庫名

當(dāng)我們連接到數(shù)據(jù)庫后,獲取數(shù)據(jù)庫名稱也變得簡(jiǎn)單。在C語言中,可以使用相應(yīng)的API庫函數(shù)獲取當(dāng)前所連接的數(shù)據(jù)庫名稱。以MySQL為例,可以使用mysql_real_query()函數(shù)查詢當(dāng)前數(shù)據(jù)庫:

int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length);

其中,stmt_str參數(shù)即為SQL語句,可以使用SHOW DATABASES;或SELECT DATABASE();語句獲取到當(dāng)前數(shù)據(jù)庫的名稱。示例代碼如下:

MYSQL *mysql = mysql_init(NULL);

mysql_real_connect(mysql, “l(fā)ocalhost”, “root”, “password”, “test”, 3306, NULL, CLIENT_FOUND_ROWS);

if(mysql_real_query(mysql, “SHOW DATABASES;”, strlen(“SHOW DATABASES;”))){

printf(“Error: %s\n”, mysql_error(mysql));

} else {

MYSQL_RES *res = mysql_store_result(mysql);

MYSQL_ROW row;

while((row = mysql_fetch_row(res))){

printf(“%s\n”, row[0]);

}

mysql_free_result(res);

if(mysql_real_query(mysql, “SELECT DATABASE();”, strlen(“SELECT DATABASE();”))){

printf(“Error: %s\n”, mysql_error(mysql));

} else {

res = mysql_store_result(mysql);

row = mysql_fetch_row(res);

printf(“Current database: %s\n”, row[0]);

mysql_free_result(res);

}

}

在上述代碼中,我們首先連接到test數(shù)據(jù)庫,然后使用SHOW DATABASES;查詢所有數(shù)據(jù)庫名稱,使用SELECT DATABASE();查詢當(dāng)前數(shù)據(jù)庫名稱。

而在連接其他數(shù)據(jù)庫時(shí),可以使用各自數(shù)據(jù)庫的連接方式,如在連接Oracle數(shù)據(jù)庫時(shí),使用OCI連接方式獲取當(dāng)前數(shù)據(jù)庫名稱:

OCIError *errhp;

OCISvcCtx *svchp;

OCIEnv *envhp;

OCIServer *srvhp;

OraText username[20] = “scott”;

OraText password[20] = “tiger”;

OraText db[20] = “orcl”;

OCIEnvCreate(&envhp, OCI_DEFAULT, (void*)(0), (void*)(0), (void*)(0), (void*)(0), (size_t)(0), (dvoid**)(0));

OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp, OCI_HTYPE_ERROR, (size_t)(0), (dvoid **)(0));

OCIHandleAlloc((dvoid *)envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER, (size_t)(0), (dvoid **)(0));

OCIHandleAlloc((dvoid *)envhp, (dvoid **)&svchp, OCI_HTYPE_SVCCTX, (size_t)(0), (dvoid **)(0));

if(OCIServerAttach(srvhp, errhp, (text*)db, strlen((const char*)db)+1, 0) != OCI_SUCCESS){

printf(“Error: OCI server attach fled!\n”);

} else {

if(OCIAttrSet((dvoid *)svchp, OCI_HTYPE_SVCCTX, (dvoid*)srvhp, (ub4)0, OCI_ATTR_SERVER, (OCIError *)errhp) != OCI_SUCCESS){

printf(“Error: OCI set server context fled!\n”);

} else {

printf(“Connected to Oracle database %s\n”, db);

OCISvcCtx *pSvcCtx = svchp;

OCIStmt *pStmt = NULL;

OraText* strSQL = (OraText*)”SELECT sys_context(‘USERENV’, ‘DB_NAME’) FROM dual”;

OCIDefine *pdefine = NULL;

OraText dbname[100];

int dbname_len = 100;

OCIHandleAlloc((void*)envhp, (void**)&pStmt, OCI_HTYPE_STMT, 0, NULL);

OCIStmtPrepare(pStmt, errhp, strSQL, strlen((char*)strSQL), OCI_NTV_SYNTAX, OCI_DEFAULT);

OCIHandleAlloc(envhp, (dvoid**)&pdefine, OCI_HTYPE_DEFINE, 0, 0);

OCIDefineByPos(pStmt, &pdefine, errhp, 1, dbname, dbname_len, SQLT_STR, 0, 0, 0, OCI_DEFAULT);

if(OCIStmtExecute(pSvcCtx, pStmt, errhp, 1, 0, NULL, NULL, OCI_DEFAULT) != OCI_SUCCESS){

printf(“Error: OCI statement execute fled!\n”);

} else {

OCIStmtFetch(pStmt, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);

printf(“Current database: %s\n”, dbname);

}

OCIHandleFree((dvoid*)pdefine, OCI_HTYPE_DEFINE);

OCIHandleFree((dvoid*)pStmt, OCI_HTYPE_STMT);

}

OCIServerDetach(srvhp, errhp, OCI_DEFAULT);

}

OCIHandleFree((dvoid *)svchp, OCI_HTYPE_SVCCTX);

OCIHandleFree((dvoid *)srvhp, OCI_HTYPE_SERVER);

OCIHandleFree((dvoid *)errhp, OCI_HTYPE_ERROR);

OCIHandleFree((dvoid *)envhp, OCI_HTYPE_ENV);

在以上代碼中,我們首先連接到orcl數(shù)據(jù)庫,然后使用SELECT sys_context(‘USERENV’, ‘DB_NAME’) FROM dual查詢當(dāng)前數(shù)據(jù)庫名稱。

四、

通過以上介紹,我們可以看到,C語言如何獲取數(shù)據(jù)庫名稱,在連接到數(shù)據(jù)庫之后,只需要使用相應(yīng)的API庫函數(shù),即可輕松獲取數(shù)據(jù)庫名稱。當(dāng)然,不同的數(shù)據(jù)庫連接方式,也需要使用各自的API庫函數(shù)獲取數(shù)據(jù)庫名稱。只有通過正確獲取數(shù)據(jù)庫名稱,才能進(jìn)行后續(xù)的數(shù)據(jù)操作,實(shí)現(xiàn)更加強(qiáng)大的應(yīng)用程序。

相關(guān)問題拓展閱讀:

  • C語言如何實(shí)現(xiàn)數(shù)據(jù)庫查詢功能?
  • c# .NET設(shè)計(jì)系統(tǒng),數(shù)據(jù)庫的問題??

C語言如何實(shí)現(xiàn)數(shù)據(jù)庫查詢功能?

這個(gè)你試一下C語言如何調(diào)用ADODB訪問數(shù)神衫據(jù)庫

如果褲瞎侍是mysql之類 只要找個(gè)mysql的例子來胡吵看就可以的 mysql有庫和頭文件可以用

c# .NET設(shè)計(jì)系統(tǒng),數(shù)據(jù)庫的問題??

在C#中進(jìn)行數(shù)據(jù)庫連接代碼如下:

string strCon = “Data Source=(local);Initial Catalog=stu;Integrated Security=True;”;

SqlConnection conn = new SqlConnection(strCon);

conn.Open();//打開數(shù)據(jù)庫連接

SqlCommand cmd = new SqlCommand(“select * from students”, conn);//查詢學(xué)生信息表

conn.Close();/碼盯/關(guān)閉數(shù)散模腔據(jù)庫連沖衫接

本文將詳細(xì)介紹如何使用Connection對(duì)象連接數(shù)據(jù)庫。對(duì)于不同的.NET數(shù)據(jù)提供者,ADO.NET采用不同的Connection對(duì)象連接數(shù)據(jù)庫。這些Connection對(duì)象為我們屏蔽了具體的實(shí)現(xiàn)細(xì)節(jié),并提供了一種統(tǒng)一的實(shí)現(xiàn)方法。

Connection類有四種:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection。

SqlConnection類的對(duì)象連接SQL Server數(shù)據(jù)庫;OracleConnection 類的對(duì)象連接Oracle數(shù)據(jù)庫;

OleDbConnection類的對(duì)象連接支持OLE DB的數(shù)據(jù)庫,如Access;而OdbcConnection類的對(duì)象連接任何支持ODBC的數(shù)據(jù)庫。與數(shù)據(jù)庫的所有通訊最終都是通過Connection對(duì)象來完成的。

SqlConnection類

Connection 用于與數(shù)據(jù)庫“對(duì)話”,并由特定提供程序的類(如 SqlConnection)表示。盡管SqlConnection類是針對(duì)Sql Server的,但是這個(gè)類茄或的許多屬性、方法與事件和OleDbConnection及OdbcConnection等類相似。本章將重點(diǎn)講解SqlConnection特定的屬性與方法,其他的Connection類你可以參考相應(yīng)的幫助文檔。

注意:使用不同的Connection對(duì)象需要導(dǎo)入不同的命名空間。OleDbConnection的顫帶伍命名空間為System.Data.OleDb。SqlConnection的命名空間為System.Data.SqlClient。OdbcConnection的命名空間為System.Data.Odbc。OracleConnection的命名空間為System.Data.OracleClinet。

SqlConnection屬性:

屬行埋性 說明

ConnectionString 其返回類型為string,獲取或設(shè)置用于打開 SQL Server 數(shù)據(jù)庫的字符串。

ConnectionTimeOut 其返回類型為int,獲取在嘗試建立連接時(shí)終止嘗試并生成錯(cuò)誤之前所等待的時(shí)間。

Database 其返回類型為string,獲取當(dāng)前數(shù)據(jù)庫或連接打開后要使用的數(shù)據(jù)庫的名稱。

DataSource 其返回類型為string,獲取要連接的 SQL Server 實(shí)例的名稱。

State 其返回類型為ConnectionState,取得當(dāng)前的連接狀態(tài):Broken、Closed、Connecting、Fetching或Open。

ServerVersion 其返回類型為string,獲取包含客戶端連接的 SQL Server 實(shí)例的版本的字符串。

PacketSize 獲取用來與 SQL Server 的實(shí)例通信的網(wǎng)絡(luò)數(shù)據(jù)包的大小(以字節(jié)為單位)。這個(gè)屬性只適用于SqlConnection類型

SqlConnection方法:

方法 說明

Close() 其返回類型為void,關(guān)閉與數(shù)據(jù)庫的連接。

CreateCommand() 其返回類型為SqlCommand,創(chuàng)建并返回一個(gè)與 SqlConnection 關(guān)聯(lián)的 SqlCommand 對(duì)象。

Open() 其返回類型為void,用連接字符串屬性指定的屬性打開數(shù)據(jù)庫連接

SqlConnection事件:

事件 說明

StateChange 當(dāng)事件狀態(tài)更改時(shí)發(fā)生。 (從 DbConnection 繼承。)

InfoMessage 當(dāng) SQL Server 返回一個(gè)警告或信息性消息時(shí)發(fā)生。

提示:可以用事件讓一個(gè)對(duì)象以某種方式通知另一對(duì)象產(chǎn)生某些事情。例如我們?cè)赪indows系統(tǒng)中選擇“開始”菜單,一旦單擊鼠標(biāo)時(shí),就發(fā)生了一個(gè)事件,通知操作系統(tǒng)將“開始”菜單顯示出來。

使用SqlConnection對(duì)象連接SQL Server數(shù)據(jù)庫

我們可以用SqlConnection()構(gòu)造函數(shù)生成一個(gè)新的SqlConnection對(duì)象。這個(gè)函數(shù)是重載的,即我們可以調(diào)用構(gòu)造函數(shù)的不同版本。SqlConnection()的構(gòu)造函數(shù)如下表所示:

構(gòu)造函數(shù) 說明

SqlConnection () 初始化 SqlConnection 類的新實(shí)例。

SqlConnection (String) 如果給定包含連接字符串的字符串,則初始化 SqlConnection 類的新實(shí)例。

假設(shè)我們導(dǎo)入了System.Data.SqlClient命名空間,則可以用下列語句生成新的SqlConnection對(duì)象:

SqlConnection mySqlConnection = new SqlConnection();

程序代碼說明:在上述語法范例的程序代碼中,我們通過使用“new“關(guān)鍵字生成了一個(gè)新的SqlConnection對(duì)象,并且將其命名為mySqlConnection。

現(xiàn)在我們就可以使用如下兩種方式連接數(shù)據(jù)庫,即采用集成的Windows驗(yàn)證和使用Sql Server身份驗(yàn)證進(jìn)行數(shù)據(jù)庫的登錄。

集成的Windows身份驗(yàn)證語法范例

string connectionString=”server=localhost;database=Northwind;

integrated security=SSPI”;

程序代碼說明:在上述語法范例的程序代碼中,我們?cè)O(shè)置了一個(gè)針對(duì)Sql Server數(shù)據(jù)庫的連接字符串。其中server表示運(yùn)行Sql Server的計(jì)算機(jī)名,由于在本書中,ASP.NET程序和數(shù)據(jù)庫系統(tǒng)是位于同一臺(tái)計(jì)算機(jī)的,所以我們可以用localhost取代當(dāng)前的計(jì)算機(jī)名。database表示所使用的數(shù)據(jù)庫名,這里設(shè)置為Sql Server自帶的一個(gè)示例數(shù)據(jù)庫–Northwind。由于我們希望采用集成的Windows驗(yàn)證方式,所以設(shè)置 integrated security為SSPI即可。

Sql Server 2023中的Windows身份驗(yàn)證模式如下:

注意:在使用集成的Windows驗(yàn)證方式時(shí),并不需要我們輸入用戶名和口令,而是把登錄Windows時(shí)輸入的用戶名和口令傳遞到Sql Server。然后Sql Server檢查用戶清單,檢查其是否具有訪問數(shù)據(jù)庫的權(quán)限。而且數(shù)據(jù)庫連接字符串是不區(qū)分大小寫的。

采用Sql Server身份驗(yàn)證的語法范例

string connectionString = “server=localhost;database=Northwind;uid=sa;pwd=sa”;

程序代碼說明:在上述語法范例的程序代碼中,采用了使用已知的用戶名和密碼驗(yàn)證進(jìn)行數(shù)據(jù)庫的登錄。uid為指定的數(shù)據(jù)庫用戶名,pwd為指定的用戶口令。為了安全起見,一般不要在代碼中包括用戶名和口令,你可以采用前面的集成的Windows驗(yàn)證方式或者對(duì)Web.Config文件中的連接字符串加密的方式提高程序的安全性。

Sql Server 2023中的Sql Server身份驗(yàn)證模式如下:

如果你使用其他的數(shù)據(jù)提供者的話,所產(chǎn)生的連接字符串也具有相類似的形式。例如我們希望以O(shè)LE DB的方式連接到一個(gè)Oracle數(shù)據(jù)庫,其連接字符串如下:

string connectionString = “data source=localhost;initial catalog=Sales;

use id=sa;password=;provider=MSDAORA”;

程序代碼說明:在上述語法范例的程序代碼中,通過專門針對(duì)Oracle數(shù)據(jù)庫的OLE DB提供程序,實(shí)現(xiàn)數(shù)據(jù)庫的連接。data source 表示運(yùn)行Oracle數(shù)據(jù)庫的計(jì)算機(jī)名,initial catalog表示所使用的數(shù)據(jù)庫名。provider表示使用的OLE DB提供程序?yàn)镸SDAORA。

Access數(shù)據(jù)庫的連接字符串的形式如下:

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

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

程序代碼說明:在上述語法范例的程序代碼中,通過專門針對(duì)Access數(shù)據(jù)庫的OLE DB提供程序,實(shí)現(xiàn)數(shù)據(jù)庫的連接。這使用的的OLE DB提供程序?yàn)镸icrosoft.Jet.OLEDB.4.0,并且數(shù)據(jù)庫存放在c:\DataSource目錄下,其數(shù)據(jù)庫文件為Northwind.mdb。

現(xiàn)在我們就可以將數(shù)據(jù)庫連接字符串傳人SqlConnection()構(gòu)造函數(shù),例如:

string connectionString = “server=localhost;database=Northwind;uid=sa;pwd=sa”;

SqlConnection mySqlConnection = new SqlConnection(connectionString);

或者寫成

SqlConnection mySqlConnection =new SqlConnection(

“server=localhost;database=Northwind;uid=sa;pwd=sa”);

在前面的范例中,通過使用“new“關(guān)鍵字生成了一個(gè)新的SqlConnection對(duì)象。因此我們也可以設(shè)置該對(duì)象的ConnectionString屬性,為其指定一個(gè)數(shù)據(jù)庫連接字符串。這和將數(shù)據(jù)庫連接字符串傳人SqlConnection()構(gòu)造函數(shù)的功能是一樣的。

SqlConnection mySqlConnection = new SqlConnection();

mySqlConnection.ConnectionString = “server=localhost;database=Northwind;uid=sa;pwd=sa”;

注意:只能在關(guān)閉Connection對(duì)象時(shí)設(shè)置ConnectionString屬性。

打開和關(guān)閉數(shù)據(jù)庫連接

生成Connection對(duì)象并將其設(shè)置ConnectionString屬性設(shè)置為數(shù)據(jù)庫連接的相應(yīng)細(xì)節(jié)之后,就可以打開數(shù)據(jù)庫連接。為此可以調(diào)用Connection對(duì)象的Open()方法。其方法如下:

mySqlConnection.Open();

完成數(shù)據(jù)庫的連接之后,我們可以調(diào)用Connection對(duì)象的Close()方法關(guān)閉數(shù)據(jù)庫連接。例如:

mySqlConnection.Close();

下面是一個(gè)顯示如何用SqlConnection對(duì)象連接Sql Server Northwind數(shù)據(jù)庫的實(shí)例程序,并且顯示該SqlConnection對(duì)象的一些屬性。

范例程序代碼如下:

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

02 {

03 protected void Page_Load(object sender, EventArgs e)

04 {

05 //建立數(shù)據(jù)庫連接字符串

06 string connectionString = “server=localhost;database=Northwind;

07 integrated security=SSPI”;

08 //將連接字符串傳入SqlConnection對(duì)象的構(gòu)造函數(shù)中

09 SqlConnection mySqlConnection = new SqlConnection(connectionString);

10 try

11 {

12 //打開連接

13 mySqlConnection.Open();

14 //利用label控件顯示mySqlConnection對(duì)象的ConnectionString屬性

15 lblInfo.Text = “<b>mySqlConnection對(duì)象的ConnectionString屬性為:<b>” +

16 mySqlConnection.ConnectionString + “<br>”;

17 lblInfo.Text += “<b>mySqlConnection對(duì)象的ConnectionTimeout屬性為<b>” +

18 mySqlConnection.ConnectionTimeout + “<br>”;

19 lblInfo.Text += “<b>mySqlConnection對(duì)象的Database屬性為<b>” +

20 mySqlConnection.Database + “<br>”;

21 lblInfo.Text += “<b>mySqlConnection對(duì)象的DataSource屬性為<b>” +

22 mySqlConnection.DataSource + “<br>”;

23 lblInfo.Text += “<b>mySqlConnection對(duì)象的PacketSize屬性為<b>” +

24 mySqlConnection.PacketSize + “<br>”;

25 lblInfo.Text += “<b>mySqlConnection對(duì)象的ServerVersion屬性為<b>” +

26 mySqlConnection.ServerVersion + “<br>”;

27 lblInfo.Text += “<b>mySqlConnection對(duì)象的當(dāng)前狀態(tài)為<b>” +

28 mySqlConnection.State + “<br>”;

29 }

30 catch (Exception err)

31 {

32 lblInfo.Text = “讀取數(shù)據(jù)庫出錯(cuò)”;

33 lblInfo.Text += err.Message;

34 }

35 finally

36 {

37 //關(guān)閉與數(shù)據(jù)庫的連接

38 mySqlConnection.Close();

39 lblInfo.Text += “<br><b>關(guān)閉連接后的mySqlConnection對(duì)象的狀態(tài)為:</b>”;

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

41 }

42 }

43 }

程序代碼說明:在上述范例的程序代碼中,我們利用try catch finally對(duì)數(shù)據(jù)庫連接進(jìn)行異常處理。當(dāng)無法連接數(shù)據(jù)庫時(shí)將拋出異常,并顯示出錯(cuò)信息,見catch代碼塊所示。在此程序中,無論是否發(fā)生異常,都可以通過finally區(qū)塊關(guān)閉數(shù)據(jù)庫的連接,從而節(jié)省計(jì)算機(jī)資源,提高了程序的效率和可擴(kuò)展性。

執(zhí)行結(jié)果:

當(dāng)然,我們還可以采用一種更加簡(jiǎn)便的方法來實(shí)現(xiàn)上述程序的功能。這就是將SqlConnection對(duì)象包含到using區(qū)塊中,這樣程序會(huì)自動(dòng)調(diào)用Dispose()方法釋放SqlConnection對(duì)象所占用的系統(tǒng)資源,無需再使用SqlConnection對(duì)象的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=localhost;database=Northwind;

06 integrated security=SSPI”;

07 SqlConnection mySqlConnection = new SqlConnection(connectionString);

08 using (mySqlConnection)

09 {

10 mySqlConnection.Open();

11 lblInfo.Text = “<b>mySqlConnection對(duì)象的ConnectionString屬性為:<b>” +

12 mySqlConnection.ConnectionString + “<br>”;

13 lblInfo.Text += “<b>mySqlConnection對(duì)象的ConnectionTimeout屬性為<b>” +

14 mySqlConnection.ConnectionTimeout + “<br>”;

15 lblInfo.Text += “<b>mySqlConnection對(duì)象的Database屬性為<b>” +

16 mySqlConnection.Database + “<br>”;

17 lblInfo.Text += “<b>mySqlConnection對(duì)象的DataSource屬性為<b>” +

18 mySqlConnection.DataSource + “<br>”;

19 lblInfo.Text += “<b>mySqlConnection對(duì)象的PacketSize屬性為<b>” +

20 mySqlConnection.PacketSize + “<br>”;

21 lblInfo.Text += “<b>mySqlConnection對(duì)象的ServerVersion屬性為<b>” +

22 mySqlConnection.ServerVersion + “<br>”;

23 lblInfo.Text += “<b>mySqlConnection對(duì)象的當(dāng)前狀態(tài)為<b>”+

24 mySqlConnection.State + “<br>”;

25 }

26 lblInfo.Text += “<br><b>關(guān)閉連接后的mySqlConnection對(duì)象的狀態(tài)為:</b>”;

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

28 }

29 }

程序代碼說明:在上述范例的程序代碼中,采用using(mySqlConnection)的形式使得代碼更加簡(jiǎn)潔,并且其更大的優(yōu)點(diǎn)就是無需編寫finally區(qū)塊代碼,可以自動(dòng)關(guān)閉與數(shù)據(jù)庫的連接。

連接池

打開與關(guān)閉數(shù)據(jù)庫都是比較耗時(shí)的。為此,ADO.NET自動(dòng)將數(shù)據(jù)庫連接存放在連接池中。連接池可以大幅度提高程序的性能和效率,因?yàn)槲覀儾槐氐却⑷碌臄?shù)據(jù)庫連接過程,而是直接利用現(xiàn)成的數(shù)據(jù)庫連接。注意,利用Close()方法關(guān)閉連接時(shí),并不是實(shí)際關(guān)閉連接,而是將連接標(biāo)為未用,放在連接池中,準(zhǔn)備下一次復(fù)用。

如果在連接字符串中提供相同的細(xì)節(jié),即相同的數(shù)據(jù)庫,用戶名,密碼等等,則可以直接取得并返回池中的連接。然后可以用這個(gè)連接訪問數(shù)據(jù)庫。

使用SqlConnection對(duì)象時(shí),可以在連接字符串中指定max pool size,表示連接池允許的更大連接數(shù)(默認(rèn)為100),也可以指定min pool size表示連接池允許的最小連接數(shù)(默認(rèn)為0)。下面的代碼指定了SqlConnection對(duì)象的max pool size為10,min pool size為5。

SqlConnection mySqlConnection = new SqlConnection(“server=localhost;database=Northwind;

integrated security=SSPI;”+”max pool size=10;min pool size=5″);

程序代碼說明:在上述范例的程序代碼中,程序最初在池中生成5個(gè)SqlConnection對(duì)象。池中可以存儲(chǔ)最多10個(gè)SqlConnection對(duì)象。如果要打開新的SqlConnection對(duì)象時(shí),池中的對(duì)象全部都在使用中,則請(qǐng)求要等待一個(gè)SqlConnection對(duì)象關(guān)閉,然后才可以使用新的SqlConnection對(duì)象。如果請(qǐng)求等待時(shí)間超過ConnectionTimeout屬性指定的秒數(shù),則會(huì)拋出異常。

下面通過一個(gè)程序來顯示連接池的性能優(yōu)勢(shì)。在應(yīng)用此程序過程我們要先引用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 //設(shè)置連接池的更大連接數(shù)為5,最小為1

06 SqlConnection mySqlConnection =new SqlConnection(

07 “server=localhost;database=Northwind;integrated security=SSPI;”+

08 “max pool size=5;min pool size=1”);

09 //新建一個(gè)StringBuilder對(duì)象

10 StringBuilder htmStr = new StringBuilder(“”);

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

12 {

13 //使用Append()方法追加字符串到StringBuilder對(duì)象的結(jié)尾處

14 htmStr.Append(“連接對(duì)象 “+count);

15 htmStr.Append(“<br>”);

16 //設(shè)置一個(gè)連接的開始時(shí)間

17 DateTime start = DateTime.Now;

18 mySqlConnection.Open();

19 //連接所用的時(shí)間

20 TimeSpan timeTaken = DateTime.Now – start;

21 htmStr.Append(“連接時(shí)間為 “+timeTaken.Milliseconds+”毫秒”);

22 htmStr.Append(“<br>”);

23 htmStr.Append(“mySqlConnection對(duì)象的狀態(tài)為” + mySqlConnection.State);

24 htmStr.Append(“<br>”);

25 mySqlConnection.Close();

26 }

27 //將StringBuilder對(duì)象的包含的字符串在label控件中顯示出來

28 lblInfo.Text = htmStr.ToString();

29 }

30 }

程序代碼說明:在上述范例的程序代碼中,我們將在連接池中重復(fù)5次打開一個(gè)SqlConnection對(duì)象,DateTime.Now表示當(dāng)前的時(shí)間。timeTaken表示從連接開始到打開連接所用的時(shí)間間隔。可以看出,打開之一個(gè)連接的時(shí)間比打開后續(xù)連接的時(shí)間要長(zhǎng),因?yàn)橹粋€(gè)連接要實(shí)際連接數(shù)據(jù)庫。被關(guān)閉之后,這個(gè)連接存放在連接池中。再次打開連接時(shí),只要從池中直接讀取即可,速度非常快。

提示:String 對(duì)象是不可改變的。每次使用 System.String 類中的方法之一時(shí),都要在內(nèi)存中創(chuàng)建一個(gè)新的字符串對(duì)象,這就需要為該新對(duì)象分配新的空間。在需要對(duì)字符串執(zhí)行重復(fù)修改的情況下,與創(chuàng)建新的 String 對(duì)象相關(guān)的系統(tǒng)開銷可能會(huì)非常昂貴。如果要修改字符串而不創(chuàng)建新的對(duì)象,則可以使用 System.Text.StringBuilder 類。例如,當(dāng)在一個(gè)循環(huán)中將許多字符串連接在一起時(shí),使用 StringBuilder 類可以提升性能。Append 方法可用來將文本或?qū)ο蟮淖址硎拘问教砑拥接僧?dāng)前 StringBuilder 對(duì)象表示的字符串的結(jié)尾處。

在ASP.NET 2.0中,使用了一種在運(yùn)行時(shí)解析為連接字符串值的新的聲明性表達(dá)式語法,按名稱引用數(shù)據(jù)庫連接字符串。連接字符串本身存儲(chǔ)在 Web.config 文件中的 <connectionStrings> 配置節(jié)下面,以便易于在單個(gè)位置為應(yīng)用程序中的所有頁進(jìn)行維護(hù)。

范例程序代碼如下:

<?xml version=”1.0″?>

<configuration>

<connectionStrings>

<add name=”Pubs” connectionString=”Server=localhost;

Integrated Security=True;Database=pubs;Persist Security Info=True”

providerName=”System.Data.SqlClient” />

<add name=”Northwind” connectionString=”Server=localhost;

Integrated Security=True;Database=Northwind;Persist Security Info=True”

providerName=”System.Data.SqlClient” />

</connectionStrings>

<system.web>

<pages styleSheetTheme=”Default”/>

</system.web>

</configuration>

程序代碼說明:在上述范例的程序代碼中,我們?cè)赪eb.Config文件中的<connectionStrings> 配置節(jié)點(diǎn)下面設(shè)置了兩個(gè)數(shù)據(jù)庫連接字符串,分別指向pubs和Northwind兩個(gè)示例數(shù)據(jù)庫。注意,在2.0中引進(jìn)了數(shù)據(jù)源控件,例如SqlDataSource 控件,我們可以將SqlDataSource 控件的 ConnectionString 屬性被設(shè)置為表達(dá)式 <%$ ConnectionStrings:Pubs %>,該表達(dá)式在運(yùn)行時(shí)由 ASP.NET 分析器解析為連接字符串。還可以為SqlDataSource 的 ProviderName 屬性指定一個(gè)表達(dá)式,例如 <%$ ConnectionStrings:Pubs.ProviderName %>。其具體的用法和新特征將在以后的章節(jié)進(jìn)行詳細(xì)的介紹。現(xiàn)在有個(gè)基礎(chǔ)的了解即可。

當(dāng)然,我們也可以用下面的方式從配置文件直接讀取數(shù)據(jù)庫連接字符串。首先我們需要引用using System.Web.Configuration命名空間,該命名空間包含用于設(shè)置 ASP.NET 配置的類。

string connectionString =ConfigurationManager.ConnectionStrings.ConnectionString;

程序代碼說明:在上述范例的程序代碼中,我們可以利用ConnectionStrings讀取相應(yīng)的Northwind字符串。同理以可以利用ConnectionStrings讀取相應(yīng)的Pubs字符串。

關(guān)于c 獲取數(shù)據(jù)庫名的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


新聞名稱:「C語言如何獲取數(shù)據(jù)庫名?」(c獲取數(shù)據(jù)庫名)
文章URL:http://www.dlmjj.cn/article/dhcdoss.html