C#操作數(shù)據(jù)庫簡介之SqlClient模式

? ? ? ?在C#中,常用的有三種 訪問數(shù)據(jù)庫的模式分別為:SqlClient模式OleDb模式Odbc模式穷遂。其中SqlClient模式是微軟老大哥專門為其產(chǎn)品Sql Server數(shù)據(jù)庫而設計的栓票,所以如果欲使用Sql Server數(shù)據(jù)庫開發(fā)應用程序的話,建議使用這種模式颜启,其性能和效率是比其他模式的要高偷俭。OleDb模式和Odbc模式可以運用在任何支持該模式的數(shù)據(jù) 庫產(chǎn)品中,如Access數(shù)據(jù)庫缰盏、DB2涌萤、Sybase和Sql Server 數(shù)據(jù)庫等。下面主要分析SqlClient模式口猜。

1负溪、引入相關的命名空間

? ? ? 在C#中要操作數(shù)據(jù)庫,一般情況需要引入兩個命名空間济炎,在三種連接模式中都要引入下面的命名空間:

using System.Data;

? ? ? 如果使用SqlClient模式的話川抡,則需要引入如下命名空間:

System.Data.SqlClient;

如果使用OleDb模式的話,需要使用下面的命名空間:

System.Data.OleDb;

如果使用Odbc模式的話,需要使用下面的命名空間:

System.Data.Odbc;

2崖堤、定義連接字符串侍咱,并建立連接對象

? ? ? 在C#中,如果想連接數(shù)據(jù)庫的話密幔,需要使用Connection連接對象楔脯。同樣,不同的連接模式下胯甩,所使用的連接對象也不同:

? ? ? 在SqlClient模式下昧廷,其基本連接字符串和連接對象如下:連接字符串:

string connString = "server=.;database=testDB;uid=sa;pwd=123456;";

? ? ? ?其中,server是指數(shù)據(jù)庫所在的機器(服務器)偎箫,如果使用當前機器(本地機器)的話木柬,可 以使用“.”、“(local)”淹办、“127.0.0.1”或本地機器的名字眉枕。如果使用其它機器上的數(shù)據(jù)庫的話,可以使用那臺機器的機器名字(確保域和工 作組的正確)或IP地址娇唯。database指的數(shù)據(jù)庫的名字齐遵。uid和pwd分別代表連接數(shù)據(jù)庫的用戶名和密碼。定義連接字符串后塔插,就可以建立SqlClient模式下的連接對象了梗摇,在SqlClient模式下,應使用SqlConnection想许。

SqlConnection sConn = new SqlConnection(connString);

3伶授、打開數(shù)據(jù)庫連接

打開數(shù)據(jù)庫使用Open方法,但在試圖打開數(shù)據(jù)連接時會發(fā)生錯誤流纹,因此常采用如下的異趁优耄控制方法(這里假設打開SqlClient模式下連接,實際上只不過連接對象的名字不同而已):

try{

sConn.Open();

}

catch(Exception ex){

MessageBox.Show("發(fā)生錯誤:"+ex.Message);

//Console.WriteLine("發(fā)生錯誤:"+ex.Message); //在控制臺下使用這種方式

}

4漱凝、Command命令對象的應用

? ? ? ? Command用于向數(shù)據(jù)庫傳輸?shù)拿畹膶ο蟠模錁?gòu)造函數(shù)常用兩個參數(shù),一個參數(shù)是所使用的 命令文本(CommandText)茸炒,另一個為所使用的連接對象Connection愕乎。

? ? ? ? 假設我們想使用SqlClient模式查詢Sql Server中TRecord數(shù)據(jù)庫中GameDetails表中的Date(日期)和Sorce(分數(shù))兩列的值,則可以建立如下的命令對象(sConn參見建立的連接sConn:

SqlCommand sCmd = new SqlCommand("SELECT Date,Sorce FROM TRecord.dbo.GameDetails",sConn);

亦可使用如下的形式:

SqlCommand sCmd = new SqlCommand();

sCmd.CommandText = "SELECT Date,Sorce FROM TRecord.dbo.GameDetails";

sCmd.Connection = sConn;

命令對象常用的有三個方法:ExecuteReader(), ExecuteNonQuery()和ExecuteScalar()壁公。ExecuteReader方法用于返回查詢結(jié)果的全部數(shù)據(jù)感论。 ExecuteNonQuery方法用于返回所影響的行數(shù),一般用于Insert紊册、Update和Delete操作比肄。ExecuteScalar方法返回 結(jié)果中的第一行第一列的值。

5、數(shù)據(jù)讀取器DataReader

? ? ? ?DataReader用于從返回來的數(shù)據(jù)區(qū)中讀取數(shù)據(jù)芳绩。其根據(jù)使用的數(shù)據(jù)連接模式不同也有不同的形式:SqlDataReader對應著SqlClient模式掀亥,OleDbDataReader對應著OleDb模式,OdbcDataReader對應著Odbc模式示括。

數(shù)據(jù)讀取器應與命令對象配合使用铺浇,下面接著4中的例子來寫:

SqlDataReader sdr = null;

sdr = sCmd.ExecuteReader();???? //執(zhí)行命令對象痢畜,并用sdr指向結(jié)果集的第一條記錄垛膝。

while(sdr.Read()){? ? ? ? ? ? ? //每讀取一條記錄后,指向其下一條記錄

textBox2.Text = textBox2.Text + sdr["Date"]+" ";

textBox2.Text += sdr["Sorce"]; ? ?

textBox2.Text += "\r\n"; ? ? ? ?//換行

}

sdr.Close();?

? ? 下面給出一個數(shù)據(jù)庫操作的例子丁稀。假設在Sql Server2012中有一個數(shù)據(jù)庫TRecord吼拥,其存放著一個數(shù)據(jù)表名為GameDetails,其結(jié)構(gòu)為GameDetails(Date,Sorce)线衫,下面使用SqlClient模式連接數(shù)據(jù)庫:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Data.SqlClient;

namespace ConnectionDb

{

public partial class Form1 : Form

{

string connString ;

SqlConnection con1;

string sql;

SqlCommand sCmd;

SqlDataReader sdr;

DataSet ds;

public Form1()

{

InitializeComponent();

this.connString = null;

this.connString = null;

this.sql = null;

this.sCmd = null;

this.sdr = null;

this.ds = null;

}

private void button1_Click(object sender, EventArgs e)

{

connString = "Server = .;Database = TRecord;uid = sa;pwd = 123456;";

con1 = new SqlConnection(connString);

try

{

con1.Open();

textBox2.Text = "鏈接成功凿可!";

}

catch (Exception ex)

{

textBox2.Text = "鏈接失敗授账!";

}

}

private void button2_Click(object sender, EventArgs e)

{

if (con1 == null)

{

textBox2.Text = "未連接數(shù)據(jù)庫.";

}

else

{

if (sdr != null)

{

sdr.Close();

}

con1.Close();

textBox2.Text = "已斷開鏈接.";

}

}

private void button3_Click(object sender, EventArgs e)

{

textBox2.Text = "";

if (con1 == null)

{

MessageBox.Show("未鏈接數(shù)據(jù)庫枯跑!","執(zhí)行錯誤");

return;

}

sql = textBox1.Text;

sCmd = new SqlCommand(sql);

sCmd.Connection = con1;

if (sql.Contains("select"))

{

sdr = sCmd.ExecuteReader();

while(sdr.Read()){

textBox2.Text = textBox2.Text + sdr["Date"]+" ";

textBox2.Text += sdr["Sorce"];

textBox2.Text += "\r\n";

}

sdr.Close();

}

else

{

sCmd.ExecuteNonQuery();

textBox2.Text = "已執(zhí)行操作!";

}

}

}

}


鏈接成功


查詢


插入


斷開鏈接





如果本文引用了你的文章而未注明白热,請及時聯(lián)系我敛助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屋确,隨后出現(xiàn)的幾起案子纳击,更是在濱河造成了極大的恐慌,老刑警劉巖攻臀,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焕数,死亡現(xiàn)場離奇詭異,居然都是意外死亡刨啸,警方通過查閱死者的電腦和手機堡赔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來设联,“玉大人善已,你說我怎么就攤上這事÷丶觯” “怎么了雕拼?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粘招。 經(jīng)常有香客問我啥寇,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任辑甜,我火速辦了婚禮衰絮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘磷醋。我一直安慰自己猫牡,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布邓线。 她就那樣靜靜地躺著淌友,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骇陈。 梳的紋絲不亂的頭發(fā)上震庭,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音你雌,去河邊找鬼器联。 笑死,一個胖子當著我的面吹牛婿崭,可吹牛的內(nèi)容都是我干的拨拓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼氓栈,長吁一口氣:“原來是場噩夢啊……” “哼渣磷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颤绕,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤幸海,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奥务,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體物独,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年氯葬,在試婚紗的時候發(fā)現(xiàn)自己被綠了挡篓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡帚称,死狀恐怖官研,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闯睹,我是刑警寧澤戏羽,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站楼吃,受9級特大地震影響始花,放射性物質(zhì)發(fā)生泄漏妄讯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一酷宵、第九天 我趴在偏房一處隱蔽的房頂上張望亥贸。 院中可真熱鬧,春花似錦浇垦、人聲如沸炕置。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朴摊。三九已至,卻和暖如春煌抒,著一層夾襖步出監(jiān)牢的瞬間仍劈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工寡壮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讹弯。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓况既,卻偏偏與公主長得像,于是被迫代替她去往敵國和親组民。 傳聞我的和親對象是個殘疾皇子棒仍,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容