您好,登錄后才能下訂單哦!
使用ASP.NET怎么連接數(shù)據(jù)庫(kù)并獲取數(shù)據(jù)?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
1.獲取數(shù)據(jù):
//引用這兩個(gè)命名空間 using System.Data.SqlClient; using System.Data; // 初始化連接對(duì)象 SqlConnection conn = new SqlConnection(); conn.ConnectionString = "User ID=sa;Initial Catalog=DataBaseName;Data Source= (local);Password=111111"; // 打開連接 if (conn.State == ConnectionState.Closed) { conn.Open(); } // 初始化命令 SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = "sql語(yǔ)句"; // 用于執(zhí)行數(shù)據(jù)插入、更新和刪除的操作;返回被影響的行數(shù)。 int i = cmd.ExecuteNonQuery(); if(i>0){MessageBox.Show("操作成功");} // 用于查詢最大值等只需返回一條數(shù)據(jù)情況下的操作;返回的是首行第一列的數(shù)據(jù)。 object obj = cmd.ExecuteScalar(); // 如果想獲取數(shù)據(jù)集合的話我們經(jīng)常使用到的是數(shù)據(jù)適配器 DataTable dt = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = cmd; adapter.Fill(dt);
2.把數(shù)據(jù)綁定到數(shù)據(jù)控件
string str = "Data Source=.;Initial Catalog=GridView;User ID=sa;Password=111111"; string sql = "select * from UserName"; SqlConnection conn = new SqlConnection(str); //conn.Open(); 使用 SqlDataAdapter(數(shù)據(jù)適配器)不用寫 //SqlCommand comm = new SqlCommand(sql, conn); //SqlDataAdapter dr = new SqlDataAdapter(comm); SqlDataAdapter dr = new SqlDataAdapter(sql,conn);//上面兩句可以合并成這一 DataSet ds = new DataSet();//創(chuàng)建數(shù)據(jù)集; dr.Fill(ds); //填充數(shù)據(jù)集 this.GridView1.DataSource = ds; this.GridView1.DataBind();//講數(shù)據(jù)源綁定到控件上, //conn.Close(); 關(guān)閉數(shù)據(jù)庫(kù)連接 if (conn.State==ConnectionState.Open) //判斷數(shù)據(jù)庫(kù)連接狀態(tài),是否連接 { conn.Close(); }
3.使用SqlDataReader:
若要?jiǎng)?chuàng)建 SqlDataReader,必須調(diào)用 SqlCommand 對(duì)象的 ExecuteReader 方法,而不要直接使用構(gòu)造函數(shù)。
string str = "Data Source=.;Initial Catalog=GridView;User ID=sa;Password=111111"; string sql = "select * from UserName"; SqlConnection conn = new SqlConnection(str); conn.Open(); SqlCommand comm = new SqlCommand(sql, conn); DataSet ds = new DataSet(); SqlDataReader dr = comm.ExecuteReader(); if (dr.Read()) { //下面兩種都可以獲得數(shù)據(jù) //this.TextBox1.Text = dr.GetString(1); //this.TextBox2.Text = dr.GetInt32(3).ToString(); this.TextBox1.Text = dr.GetString(dr.GetOrdinal("Name")); this.TextBox2.Text = dr.GetInt32(dr.GetOrdinal("Age")).ToString(); } //循環(huán)輸出 while (dr.Read()) { Response.Write(dr["Name"]); Response.Write(dr["Age"]); Response.Write("<br/>"); } dr.Close(); if (conn.State == ConnectionState.Open) { conn.Close(); }
SqlDataReader:提供一種從 SQL Server 數(shù)據(jù)庫(kù)讀取行的只進(jìn)流的方式
補(bǔ)充:asp.net數(shù)據(jù)庫(kù)連接web.config配置
SQL Server .NET Data Provider 連接字符串包含一個(gè)由一些屬性名/值對(duì)組成的集合。每一個(gè)屬性/值對(duì)都由分號(hào)隔開。
PropertyName1=Value1; PropertyName2=Value2; PropertyName3=Value3; .....
同樣,連接字符串必須包含SQL Server實(shí)例名稱:
復(fù)制代碼 代碼如下:
Data Source=ServerName;
使用本地的SQL Server(localhost),如果想要使用遠(yuǎn)程服務(wù)器運(yùn)行,應(yīng)該在示例對(duì)象中把正確的服務(wù)器賦給Data Source 屬性。此外,還必須指定所支持的兩種身份驗(yàn)證方法(即Windows身份驗(yàn)證和SQL Server身份驗(yàn)證)中的其中一種。Windows身份驗(yàn)證使用Windows登錄用戶身份連接數(shù)據(jù)庫(kù),而SQL身份驗(yàn)證要求顯式地指定SQL Server用戶ID和密碼。要想使用Windows身份驗(yàn)證,必須在連接字符串中包括 Integrated Security 屬性:
Data Source=ServerName; Integrated Security=True;
默認(rèn)情況下,Integrated Security 屬性為 False ,這意味著將禁用Windows身份驗(yàn)證。如果沒有顯式地把這個(gè)屬性的值設(shè)置為True,連接將使用SQL Server身份驗(yàn)證,因此,必須提供SQL Server用戶ID和密碼。Integrated Security屬性還能識(shí)別的其他值只有SSPI(Security Support Provider Interface,安全性支持提供者接口).在所有的Windows NT操作系統(tǒng)上,其中包括Windows NT 4.0、2000、XP,都支持值SSPI。它是使用Windows身份驗(yàn)證時(shí)可以使用的惟一接口,相當(dāng)于把Integrated Security 屬性值設(shè)置為True。
在Windows身份驗(yàn)證模式中,SQL Server使用Windows的安全子系統(tǒng)對(duì)用戶連接進(jìn)行有效性驗(yàn)證。即使顯示地指定用戶ID和密碼,SQL Server也不檢查連接字符串中的用戶ID和密碼。因?yàn)橹挥蠾indows NT、2000、XP支持SSPI,因此如果正使用的是這些操作系統(tǒng),則只能使用Windows集成的安全策略去連接SQL Server。不論使用哪一個(gè)操作系統(tǒng),當(dāng)使用SQL Server身份驗(yàn)證時(shí),必須在連接字符串中指定用戶ID和密碼:
Data Source=ServerName; User ID=donaldx; Password=unbreakable
默認(rèn)情況下,SQL Server .NET Data Provider連接指定用戶的默認(rèn)數(shù)據(jù)庫(kù),當(dāng)在數(shù)據(jù)庫(kù)中創(chuàng)建用戶時(shí),可以設(shè)置用戶的默認(rèn)數(shù)據(jù)庫(kù)。此外,也可以在任意時(shí)間更改用戶的默認(rèn)數(shù)據(jù)庫(kù)。例如,系統(tǒng)管理員的默認(rèn)數(shù)據(jù)庫(kù)是master。如果想要連接不同的數(shù)據(jù)庫(kù),應(yīng)該指定數(shù)據(jù)庫(kù)的名稱:
Data Source=ServerName; Integrated Security=SSPI; Initial Catalog=Northwind
每一種身份驗(yàn)證都有它的優(yōu)點(diǎn)和缺點(diǎn)。Windows身份驗(yàn)證使用單一的用戶信息庫(kù)源,因此,不需要為數(shù)據(jù)庫(kù)訪問去分別配置用戶。連接字符串不包含用戶ID和密碼,因此消除了把用戶ID和密碼暴露給未授權(quán)的用戶的危險(xiǎn)??梢栽贏ctive Directory中管理用戶和他們的角色,而不必在SQL Server中顯式地配置他們的屬性。
Windows身份驗(yàn)證的缺點(diǎn)是,它要求客戶通過Windows的安全子系統(tǒng)支持的安全通道去連接SQL Server。如果應(yīng)用種序需要通過不安全的網(wǎng)絡(luò)(例如Internet)連接SQL Server,Windows身份驗(yàn)證將不工作。此外,這種身份驗(yàn)證方法也部分地把管理數(shù)據(jù)庫(kù)訪問控制的責(zé)任從DBA身上轉(zhuǎn)移到了系統(tǒng)管理員身上,這在確定的環(huán)境中也許是一個(gè)問題。
一般而言,在設(shè)計(jì)通用的應(yīng)用程序時(shí),為了使用Windows身份驗(yàn)證,將會(huì)對(duì)一些方面進(jìn)行加強(qiáng)。大多數(shù)公司的數(shù)據(jù)庫(kù)都駐留在比較健壯的Windows服務(wù)器操作系統(tǒng)上,那些操作系統(tǒng)都支持Windows身份驗(yàn)證。數(shù)據(jù)訪問層和數(shù)據(jù)表示層的分離也促進(jìn)了把數(shù)據(jù)訪問代碼封裝在中間層組件思想的應(yīng)用,中間層組件通常運(yùn)行在具有數(shù)據(jù)庫(kù)服務(wù)器的內(nèi)部網(wǎng)絡(luò)中。當(dāng)這樣設(shè)計(jì)時(shí),就不需要通過不安全通道建立數(shù)據(jù)庫(kù)連接。除此之外,Web服務(wù)也使直接連接不同域中數(shù)據(jù)庫(kù)的需要大減少。
數(shù)據(jù)庫(kù)的連接性已經(jīng)發(fā)展成為應(yīng)用程序開發(fā)的一個(gè)標(biāo)準(zhǔn)方面。數(shù)據(jù)庫(kù)連接字符串現(xiàn)在已經(jīng)成為每個(gè)項(xiàng)目的標(biāo)準(zhǔn)必備條件。我發(fā)現(xiàn)自己為了找到所需要的句法,經(jīng)常要從另外一個(gè)應(yīng)用程序中復(fù)制連接字符串或者進(jìn)行一次搜索。這個(gè)在與SQL Server交互操作時(shí)更是如此,因?yàn)樗刑嗟倪B接字符串選項(xiàng)。現(xiàn)在就讓我們來研究一下連接字符串的眾多方面。
連接字符串
在對(duì)象實(shí)例化或者建立期間,數(shù)據(jù)庫(kù)連接字符串通過屬性或方法被傳遞到必要的對(duì)象。連接字符串的格式是一個(gè)以分號(hào)為界,劃分鍵/值參數(shù)對(duì)的列表。列表A中包括了一個(gè)C#中的例子,說明了怎樣用創(chuàng)建SqlConnection對(duì)象的方法連接到SQL Server(實(shí)際的連接字符串是通過對(duì)象的ConnectionString屬性分配的)。列表B中包括的是VB.NET的版本。
列表A
string cString = "Data Source=server;Initial Catalog=db;User ID=test;Password=test;"; SqlConnectionconn = new SqlConnection(); conn.ConnectionString = cString; conn.Open();
列表B
Dim cString As String cString = "Data Source=server;Initial Catalog=db;User ID=test;Password=test;" Dim conn As SqlConnection = New SqlConnection() conn.ConnectionString = cString conn.Open()
連接字符串會(huì)指定數(shù)據(jù)庫(kù)服務(wù)器和數(shù)據(jù)庫(kù),以及訪問數(shù)據(jù)庫(kù)必需的用戶名和密碼。但是這種格式并不是對(duì)所有數(shù)據(jù)庫(kù)交互都適用,它的確有許多可用的選項(xiàng),其中很多選項(xiàng)都有同義詞。
和Data Source(數(shù)據(jù)源)、Initial Catalog(初始編目)、User ID(用戶ID)、和Password(密碼)等元素一起,下面這些選項(xiàng)都是可用的:
Application Name(應(yīng)用程序名稱):應(yīng)用程序的名稱。如果沒有被指定的話,它的值為.NET SqlClient Data Provider(數(shù)據(jù)提供程序).
AttachDBFilename/extended properties(擴(kuò)展屬性)/Initial File Name(初始文件名):可連接數(shù)據(jù)庫(kù)的主要文件的名稱,包括完整路徑名稱。數(shù)據(jù)庫(kù)名稱必須用關(guān)鍵字?jǐn)?shù)據(jù)庫(kù)指定。
Connect Timeout(連接超時(shí))/Connection Timeout(連接超時(shí)):一個(gè)到服務(wù)器的連接在終止之前等待的時(shí)間長(zhǎng)度(以秒計(jì)),缺省值為15。
Connection Lifetime(連接生存時(shí)間):當(dāng)一個(gè)連接被返回到連接池時(shí),它的創(chuàng)建時(shí)間會(huì)與當(dāng)前時(shí)間進(jìn)行對(duì)比。如果這個(gè)時(shí)間跨度超過了連接的有效期的話,連接就被取消。其缺省值為0。
Connection Reset(連接重置):表示一個(gè)連接在從連接池中被移除時(shí)是否被重置。一個(gè)偽的有效在獲得一個(gè)連接的時(shí)候就無需再進(jìn)行一個(gè)額外的服務(wù)器來回運(yùn)作,其缺省值為真。
Current Language(當(dāng)前語(yǔ)言):SQL Server語(yǔ)言記錄的名稱。
Data Source(數(shù)據(jù)源)/Server(服務(wù)器)/Address(地址)/Addr(地址)/Network Address(網(wǎng)絡(luò)地址):SQL Server實(shí)例的名稱或網(wǎng)絡(luò)地址。
Encrypt(加密):當(dāng)值為真時(shí),如果服務(wù)器安裝了授權(quán)證書,SQL Server就會(huì)對(duì)所有在客戶和服務(wù)器之間傳輸?shù)臄?shù)據(jù)使用SSL加密。被接受的值有true(真)、false(偽)、yes(是)和no(否)。
Enlist(登記):表示連接池程序是否會(huì)自動(dòng)登記創(chuàng)建線程的當(dāng)前事務(wù)語(yǔ)境中的連接,其缺省值為真。
Database(數(shù)據(jù)庫(kù))/Initial Catalog(初始編目):數(shù)據(jù)庫(kù)的名稱。
Integrated Security(集成安全)/Trusted Connection(受信連接):表示W(wǎng)indows認(rèn)證是否被用來連接數(shù)據(jù)庫(kù)。它可以被設(shè)置成真、偽或者是和真對(duì)等的sspi,其缺省值為偽。
Max Pool Size(連接池的最大容量):連接池允許的連接數(shù)的最大值,其缺省值為100。
Min Pool Size(連接池的最小容量):連接池允許的連接數(shù)的最小值,其缺省值為0。
Network Library(網(wǎng)絡(luò)庫(kù))/Net(網(wǎng)絡(luò)):用來建立到一個(gè)SQL Server實(shí)例的連接的網(wǎng)絡(luò)庫(kù)。支持的值包括: dbnmpntw (Named Pipes)、dbmsrpcn (Multiprotocol/RPC)、dbmsvinn(Banyan Vines)、dbmsspxn (IPX/SPX)和dbmssocn (TCP/IP)。協(xié)議的動(dòng)態(tài)鏈接庫(kù)必須被安裝到適當(dāng)?shù)倪B接,其缺省值為TCP/IP。
Packet Size(數(shù)據(jù)包大小):用來和數(shù)據(jù)庫(kù)通信的網(wǎng)絡(luò)數(shù)據(jù)包的大小。其缺省值為8192。
Password(密碼)/Pwd:與帳戶名相對(duì)應(yīng)的密碼。
Persist Security Info(保持安全信息):用來確定一旦連接建立了以后安全信息是否可用。如果值為真的話,說明像用戶名和密碼這樣對(duì)安全性比較敏感的數(shù)據(jù)可用,而如果值為偽則不可用。重置連接字符串將重新配置包括密碼在內(nèi)的所有連接字符串的值。其缺省值為偽。
Pooling(池):確定是否使用連接池。如果值為真的話,連接就要從適當(dāng)?shù)倪B接池中獲得,或者,如果需要的話,連接將被創(chuàng)建,然后被加入合適的連接池中。其缺省值為真。
User ID(用戶ID):用來登陸數(shù)據(jù)庫(kù)的帳戶名。
Workstation ID(工作站ID):連接到SQL Server的工作站的名稱。其缺省值為本地計(jì)算機(jī)的名稱。
解決SQL Server 連接時(shí)的一些基本問題后的若干初淺心得
學(xué)生做了一個(gè)題庫(kù)系統(tǒng),用C#寫的ASP應(yīng)用程序,數(shù)據(jù)庫(kù)用SQL Server2000,交給我看看。放到服務(wù)器上后,出現(xiàn)問題。反復(fù)調(diào)整后發(fā)現(xiàn)了解決的方法,其實(shí)很簡(jiǎn)單?;剡^頭去看了看,發(fā)現(xiàn)是自己對(duì)SQL Server的連接語(yǔ)句和用戶權(quán)限的認(rèn)識(shí)不足所造成的。下面將我的一些心得以及網(wǎng)上查到的有關(guān)資料匯集一下,以為后來者借鑒,當(dāng)然很膚淺。
1、SQL Server的連接方式
以本地服務(wù)器(LocalHost),數(shù)據(jù)庫(kù)(Northwind)為例,可以有以下一些連接方式
SqlConnection conn=new SqlConnection( "Server=LocalHost;Integrated Security=SSPI;Database=Northwind"); SqlConnection conn = new SqlConnection("Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=Northwind;"); SqlConnection conn = new SqlConnection(" Data Source=LocalHost;Initial Catalog=Northwind;Integrated Security=SSPI;Persist Security Info=False;Workstation Id=XURUI;Packet Size=4096; "); SqlConnection myConn = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Database=northwind;Server=LocalHost"); SqlConnection conn = new SqlConnection(" Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900");
心得:
a.Server和Database,Data Source和Initial Catalog配對(duì)使用的,可以互相替換(見笑)
b.Integrated Security默認(rèn)值是False,此時(shí)需要提供Uid和Pwd,即將以Sql Server 用戶身份登陸數(shù)據(jù)庫(kù);如果設(shè)置為True,Yes 或 SSPI,這不能出現(xiàn)Uid和Pwd,將以Windows用戶省份登陸數(shù)據(jù)庫(kù)。強(qiáng)烈推薦用后一種形式,安全性更高。
c.Integrated Security和Persist Security Info同時(shí)出現(xiàn),后者設(shè)置為False,可保證信息安全。
更多字符串連接說明請(qǐng)看MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp
連接字符串的書寫應(yīng)該熟練后應(yīng)該沒有什么問題,我是再看別人的程序,說實(shí)話有些東東還真不清楚。但連接不上的問題出現(xiàn)后,得解決呀。所以必須要弄懂這些關(guān)鍵字的意義,修改后再測(cè)試。
2、SQL Server的用戶設(shè)置
問題一、采用連接字符串
復(fù)制代碼 代碼如下:
SqlConnection conn = new SqlConnection(" Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900");
錯(cuò)誤:
用戶"sa"登陸失敗,沒有可信任的Sql Server連接
查資料后找到解決方法:
原因:Sql Server的驗(yàn)證方式需要設(shè)置為Sql Server驗(yàn)證和Windows集成驗(yàn)證的混合方式,如果僅設(shè)置為后一種方式,就會(huì)出像上述問題
解決:運(yùn)行Sql Server的企業(yè)管理器,點(diǎn)擊服務(wù)器,在右鍵菜單中選擇屬性,選安全性,更改驗(yàn)證方式即可
問題二、采用連接字符串
復(fù)制代碼 代碼如下:
SqlConnection conn = new SqlConnection("Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=Northwind;");
錯(cuò)誤:
用戶"computername\IWAM_servername"登陸失敗
原因:SQL Server的登陸用戶中不包括IWAM_servername
解決方法:運(yùn)行Sql Server的企業(yè)管理器,點(diǎn)擊服務(wù)器,選安全性,選登陸,新建登陸中加入IWAM_servername,并配備相應(yīng)的權(quán)限,如只能訪問Northwind數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的角色設(shè)置為public和db_owner。
3、關(guān)于連接的安全性
最好使用SSPI的集成安全方式連接數(shù)據(jù)庫(kù),而sa用戶的方式連接會(huì)存在安全隱患,我認(rèn)為主要是因?yàn)樵诎惭bSQL Server時(shí),經(jīng)常會(huì)為了訪問的方便設(shè)置sa的密碼為空,黑客一旦讓sa成為管理員,就可以獲得對(duì)系統(tǒng)的所有訪問權(quán)限。所以為了數(shù)據(jù)庫(kù)的安全,可以設(shè)置 SQL server的訪問用戶只能經(jīng)過windows集成驗(yàn)證,設(shè)置sa的安全密碼,加強(qiáng)數(shù)據(jù)庫(kù)的安全性。當(dāng)然設(shè)置為windows集成驗(yàn)證后,數(shù)據(jù)庫(kù)的性能和訪問的靈活性勢(shì)必會(huì)受到影響,管理員可以針對(duì)每一個(gè)數(shù)據(jù)庫(kù)設(shè)置不同的驗(yàn)證方式,而不必對(duì)SQL server設(shè)置成統(tǒng)一的方式。
關(guān)于使用ASP.NET怎么連接數(shù)據(jù)庫(kù)并獲取數(shù)據(jù)問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。