C#數(shù)據(jù)庫(kù)操作的示例詳解
功能需求
1,利用隨機(jī)數(shù)模擬產(chǎn)生每次考試成績(jī)
2,將每次考試成績(jī)存入到數(shù)據(jù)庫(kù)
3,將每次考試成績(jī)劃分優(yōu)、良、中、差、不及格五類(lèi),并作為查詢(xún)條件,查詢(xún)符合每種水平的成績(jī)
技術(shù)知識(shí)點(diǎn)
1.random類(lèi)的使用
2.數(shù)據(jù)庫(kù)的鏈接、添加數(shù)據(jù)、查詢(xún)數(shù)據(jù)、讀取數(shù)據(jù)
3,combox控件的使用
4,DataGridView控件的使用
準(zhǔn)備工作
創(chuàng)建數(shù)據(jù)庫(kù),本文案例使用Sql Server2014,數(shù)據(jù)庫(kù)表如下:

實(shí)現(xiàn)步驟
1.模擬產(chǎn)生考試成績(jī),點(diǎn)擊考試按鈕,產(chǎn)生六科考試成績(jī)
Random rd = new Random();//實(shí)例化random類(lèi)
int[] scores = new int[6];
for(int i = 0;i<scores.Length;i++)
{
scores[i] = rd.Next(0, 100);
SumScore += scores[i];//總成績(jī)
}
AvgScore = SumScore / scores.Length;//平均分
ScoreLevel = GetScoreLevel(SumScore);
tbx01.Text = scores[0].ToString();
tbx02.Text = scores[1].ToString();
tbx03.Text = scores[2].ToString();
tbx04.Text = scores[3].ToString();
tbx05.Text = scores[4].ToString();
tbx06.Text = scores[5].ToString();
2.將每次考試成績(jī)存儲(chǔ)到數(shù)據(jù)庫(kù)中,通過(guò)按鈕觸發(fā)。
//創(chuàng)建數(shù)據(jù)庫(kù)操作類(lèi),DBOpera,方便其他功能在進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),減少重復(fù)工作。
//數(shù)據(jù)庫(kù)鏈接字符串,使用private防止為外部訪問(wèn)修改
private static string connstring = @"Data source = RANDOM\SQLEXPRESS; Initial Catalog = DB1;User ID=sa; pwd = 123456";
//數(shù)據(jù)庫(kù)鏈接對(duì)象
public static SqlConnection conn = new SqlConnection(connstring);
//定義執(zhí)行sql查詢(xún)語(yǔ)句方法
public int ExecSQL(string sql)
{
//執(zhí)行查詢(xún)語(yǔ)句后并不需要返回所有的查詢(xún)結(jié)果,而僅需要返回一個(gè)值,
//例如查詢(xún)表中的記錄行數(shù)
//實(shí)例化sqlcommand類(lèi)。
SqlCommand cmd = new SqlCommand(sql, conn);
if (conn.State == ConnectionState.Closed)//如果當(dāng)前數(shù)據(jù)庫(kù)鏈接處于關(guān)閉狀態(tài)
conn.Open();
int num = Convert.ToInt32(cmd.ExecuteScalar());//執(zhí)行查詢(xún)
conn.Close();
return num;
}
public int ExecSQLResult(string sql)
{
/*執(zhí)行非查詢(xún) SQL 語(yǔ)句時(shí)并不需要返回表中的數(shù)據(jù)
增加、修改、刪除的操作
該方法的返回值是一個(gè)整數(shù),表示 SqlCommand 類(lèi)在執(zhí)行 SQL 語(yǔ)句后,
對(duì)表中數(shù)據(jù)影響的行數(shù)。返回值為-1時(shí),代表 SQL 語(yǔ)句執(zhí)行失敗,返回值為 0 時(shí),代表 SQL 語(yǔ)句對(duì)當(dāng)前數(shù)據(jù)表中的數(shù)據(jù)沒(méi)有影響。*/
//實(shí)例化sqlcommand對(duì)象
SqlCommand cmd = new SqlCommand(sql, conn);
if (conn.State == ConnectionState.Closed)
conn.Open();
int result = cmd.ExecuteNonQuery();
conn.Close();
return result;
}
public DataSet GetDataSet(string sql)
{
//將數(shù)據(jù)表中的數(shù)據(jù)查詢(xún)出來(lái)并添加到 DataSet 中
//每個(gè) DataSet 都是由若干個(gè)數(shù)據(jù)表構(gòu)成的,DataTable 即數(shù)據(jù)表,
//每個(gè) DataTable 也都是由行和列構(gòu)成的,
//行使用 DataRow 類(lèi)表示、列使用 DataColumn 類(lèi)表示。
SqlDataAdapter sqlda = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
sqlda.Fill(ds); //填充數(shù)據(jù)集
return ds; // 返回?cái)?shù)據(jù)集
}
public SqlDataReader GetDataReader(string sql)
{
//讀取表中的查詢(xún)結(jié)果,以只讀方式讀取的(即不能修改 DataReader 中存放的數(shù)據(jù))
//當(dāng)查詢(xún)結(jié)果僅為一條時(shí),可以使用 if 語(yǔ)句查詢(xún) DataReader 對(duì)象中的數(shù)據(jù),
//如果返回值是多條數(shù)據(jù),需要通過(guò) while 語(yǔ)句遍歷 DataReader 對(duì)象中的數(shù)據(jù)。
SqlCommand cmd = new SqlCommand(sql, conn);
if (conn.State == ConnectionState.Closed)
conn.Open();
SqlDataReader sqlDR = cmd.ExecuteReader();
return sqlDR;
}
}
//外部調(diào)用DBOpera類(lèi),將模擬產(chǎn)生的考試成績(jī)存儲(chǔ)到數(shù)據(jù)庫(kù)中
//將考試成績(jī)保存到數(shù)據(jù)庫(kù)中
//調(diào)用DataOperaor類(lèi)中ExecSQLResult方法
string sql = "insert into MScore(Level,Math,Chinese,English," +
"Chemical,Physics,Biology,TotalScore,AvgScore) values" +
"('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')";
//填充SQL語(yǔ)句
sql = string.Format(sql, ScoreLevel, tbx01.Text, tbx02.Text, tbx03.Text, tbx04.Text, tbx05.Text,
tbx06.Text, SumScore.ToString(), AvgScore.ToString());
int result = DbOpera.ExecSQLResult(sql);
if (result != -1)
{
MessageBox.Show("數(shù)據(jù)存儲(chǔ)成功");
}
else
{
MessageBox.Show("數(shù)據(jù)存儲(chǔ)失??!");
}
3.利用組合框,顯示所有考試成績(jī)的評(píng)語(yǔ)
//創(chuàng)建方法,判斷成績(jī)的評(píng)語(yǔ)
public static string GetScoreLevel(int score)
{
string level = null;
//總分540-600為優(yōu),480-540為良,420-480為中,360-420為差,低于420為不及格
if(score >= 540)
{
level = "優(yōu)";
}
else if(score >= 480)
{
level = "良";
}
else if (score >= 420)
{
level = "中";
}
else if (score >= 360)
{
level = "差";
}
else
{
level = "不及格";
}
return level;
}
//從數(shù)據(jù)庫(kù)讀取每次考試成績(jī)?cè)u(píng)語(yǔ),并將數(shù)據(jù)顯示到組合框中
//查詢(xún)考試成績(jī)所處分段,并將這些信息在組合框中顯示
//定時(shí)查詢(xún)語(yǔ)句
//cbx01為控件combox名稱(chēng)
ArrayList arylist = new ArrayList();
string sql = "select distinct level from MScore";
DataSet ds = DbOpera.GetDataSet(sql);
if(ds.Tables[0].Rows.Count >0)
{
DataTable dt = ds.Tables[0];
foreach (DataRow dr in dt.Rows)
{
arylist.Add(dr[0].ToString().Trim());
}
cbx01.DataSource = arylist;
}
4.根據(jù)查詢(xún)條件,查詢(xún)符合條件的數(shù)據(jù),并使用DataGridView控件顯示
private void button3_Click(object sender, EventArgs e)
{
//查詢(xún)考試總成績(jī)大于查詢(xún)值的成績(jī)分布數(shù)據(jù)
//定義查詢(xún)語(yǔ)句
string sql = "select Math,Chinese,English,Chemical,Physics,BIology,TotalScore,AvgScore from mscore where level ='" + cbx01.Text.ToString().Trim()+"'";
//創(chuàng)建DataSet類(lèi)的對(duì)象
//datagridview1為控件datagridview名稱(chēng)
DataSet ds = DbOpera.GetDataSet(sql);
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.Columns[0].HeaderText = "數(shù)學(xué)";
dataGridView1.Columns[1].HeaderText = "語(yǔ)文";
dataGridView1.Columns[2].HeaderText = "英語(yǔ)";
dataGridView1.Columns[3].HeaderText = "化學(xué)";
dataGridView1.Columns[4].HeaderText = "物理";
dataGridView1.Columns[5].HeaderText = "生物";
dataGridView1.Columns[6].HeaderText = "總分";
dataGridView1.Columns[7].HeaderText = "平均分";
// 設(shè)置數(shù)據(jù)表格為只讀
dataGridView1.ReadOnly = true;
//不允許添加行
dataGridView1.AllowUserToAddRows = false;
//背景為白色
dataGridView1.BackgroundColor = Color.White;
//只允許選中單行
dataGridView1.MultiSelect = false;
//整行選中
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
動(dòng)畫(huà)演示效果

以上就是C#數(shù)據(jù)庫(kù)操作的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C#數(shù)據(jù)庫(kù)操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談C#下winform和JS的互相調(diào)用和傳參(webbrowser)
下面小編就為大家?guī)?lái)一篇淺談C#下winform和JS的互相調(diào)用和傳參(webbrowser)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
C#如何通過(guò)QQ郵件發(fā)送驗(yàn)證碼到指定郵箱
在程序設(shè)計(jì)中發(fā)送驗(yàn)證碼是常見(jiàn)的一個(gè)功能,用戶(hù)在注冊(cè)賬號(hào)時(shí)或忘記密碼后通常需要發(fā)送驗(yàn)證碼到手機(jī)短信或郵箱來(lái)驗(yàn)證身份,這篇文章主要給大家介紹了關(guān)于C#如何通過(guò)QQ郵件發(fā)送驗(yàn)證碼到指定郵箱的相關(guān)資料,需要的朋友可以參考下2024-01-01
C#連接Oracle數(shù)據(jù)庫(kù)的實(shí)例方法
C#連接Oracle數(shù)據(jù)庫(kù)的實(shí)例方法,需要的朋友可以參考一下2013-04-04
基于C#解決庫(kù)存扣減及訂單創(chuàng)建時(shí)防止并發(fā)死鎖的問(wèn)題
這篇文章主要介紹了基于C#解決庫(kù)存扣減及訂單創(chuàng)建時(shí)防止并發(fā)死鎖的問(wèn)題,很多開(kāi)發(fā)人員對(duì)于這個(gè)問(wèn)題的排查起來(lái)是比較困難的,而生產(chǎn)生的原因多種多樣,很多人認(rèn)是因?yàn)楸碇械臄?shù)據(jù)太多了同時(shí)操作的人多人才會(huì)產(chǎn)生這種錯(cuò)誤,下面我們來(lái)還原一下死鎖的過(guò)程2022-05-05

