[数据库] C#数据库操作

1368 0
Honkers 2025-3-7 10:25:19 | 显示全部楼层 |阅读模式

功能需求

1,利用随机数模拟产生每次考试成绩

2,将每次考试成绩存入到数据库

3,将每次考试成绩划分优、良、中、差、不及格五类,并作为查询条件,查询符合每种水平的成绩

技术知识点

1.random类的使用

2.数据库的链接、添加数据、查询数据、读取数据

3,combox控件的使用

4,DataGridView控件的使用

准备工作

创建数据库,本文案例使用Sql Server2014,数据库表如下:

实现步骤

1模拟产生考试成绩,点击考试按钮,产生六科考试成绩

  1. Random rd = new Random();//实例化random类
  2. int[] scores = new int[6];
  3. for(int i = 0;i<scores.Length;i++)
  4. {
  5. scores[i] = rd.Next(0, 100);
  6. SumScore += scores[i];//总成绩
  7. }
  8. AvgScore = SumScore / scores.Length;//平均分
  9. ScoreLevel = GetScoreLevel(SumScore);
  10. tbx01.Text = scores[0].ToString();
  11. tbx02.Text = scores[1].ToString();
  12. tbx03.Text = scores[2].ToString();
  13. tbx04.Text = scores[3].ToString();
  14. tbx05.Text = scores[4].ToString();
  15. tbx06.Text = scores[5].ToString();
复制代码

2,将每次考试成绩存储到数据库中,通过按钮触发。

  1. //创建数据库操作类,DBOpera,方便其他功能在进行数据库操作时,减少重复工作。
  2. //数据库链接字符串,使用private防止为外部访问修改
  3. private static string connstring = @"Data source = RANDOM\SQLEXPRESS; Initial Catalog = DB1;User ID=sa; pwd = 123456";
  4. //数据库链接对象
  5. public static SqlConnection conn = new SqlConnection(connstring);
  6. //定义执行sql查询语句方法
  7. public int ExecSQL(string sql)
  8. {
  9. //执行查询语句后并不需要返回所有的查询结果,而仅需要返回一个值,
  10. //例如查询表中的记录行数
  11. //实例化sqlcommand类。
  12. SqlCommand cmd = new SqlCommand(sql, conn);
  13. if (conn.State == ConnectionState.Closed)//如果当前数据库链接处于关闭状态
  14. conn.Open();
  15. int num = Convert.ToInt32(cmd.ExecuteScalar());//执行查询
  16. conn.Close();
  17. return num;
  18. }
  19. public int ExecSQLResult(string sql)
  20. {
  21. /*执行非查询 SQL 语句时并不需要返回表中的数据
  22. 增加、修改、删除的操作
  23. 该方法的返回值是一个整数,表示 SqlCommand 类在执行 SQL 语句后,
  24. 对表中数据影响的行数。返回值为-1时,代表 SQL 语句执行失败,返回值为 0 时,代表 SQL 语句对当前数据表中的数据没有影响。*/
  25. //实例化sqlcommand对象
  26. SqlCommand cmd = new SqlCommand(sql, conn);
  27. if (conn.State == ConnectionState.Closed)
  28. conn.Open();
  29. int result = cmd.ExecuteNonQuery();
  30. conn.Close();
  31. return result;
  32. }
  33. public DataSet GetDataSet(string sql)
  34. {
  35. //将数据表中的数据查询出来并添加到 DataSet 中
  36. //每个 DataSet 都是由若干个数据表构成的,DataTable 即数据表,
  37. //每个 DataTable 也都是由行和列构成的,
  38. //行使用 DataRow 类表示、列使用 DataColumn 类表示。
  39. SqlDataAdapter sqlda = new SqlDataAdapter(sql, conn);
  40. DataSet ds = new DataSet();
  41. sqlda.Fill(ds); //填充数据集
  42. return ds; // 返回数据集
  43. }
  44. public SqlDataReader GetDataReader(string sql)
  45. {
  46. //读取表中的查询结果,以只读方式读取的(即不能修改 DataReader 中存放的数据)
  47. //当查询结果仅为一条时,可以使用 if 语句查询 DataReader 对象中的数据,
  48. //如果返回值是多条数据,需要通过 while 语句遍历 DataReader 对象中的数据。
  49. SqlCommand cmd = new SqlCommand(sql, conn);
  50. if (conn.State == ConnectionState.Closed)
  51. conn.Open();
  52. SqlDataReader sqlDR = cmd.ExecuteReader();
  53. return sqlDR;
  54. }
  55. }
  56. //外部调用DBOpera类,将模拟产生的考试成绩存储到数据库中
  57. //将考试成绩保存到数据库中
  58. //调用DataOperaor类中ExecSQLResult方法
  59. string sql = "insert into MScore(Level,Math,Chinese,English," +
  60. "Chemical,Physics,Biology,TotalScore,AvgScore) values" +
  61. "('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')";
  62. //填充SQL语句
  63. sql = string.Format(sql, ScoreLevel, tbx01.Text, tbx02.Text, tbx03.Text, tbx04.Text, tbx05.Text,
  64. tbx06.Text, SumScore.ToString(), AvgScore.ToString());
  65. int result = DbOpera.ExecSQLResult(sql);
  66. if (result != -1)
  67. {
  68. MessageBox.Show("数据存储成功");
  69. }
  70. else
  71. {
  72. MessageBox.Show("数据存储失败!");
  73. }
复制代码

3,利用组合框,显示所有考试成绩的评语,

  1. //创建方法,判断成绩的评语
  2. public static string GetScoreLevel(int score)
  3. {
  4. string level = null;
  5. //总分540-600为优,480-540为良,420-480为中,360-420为差,低于420为不及格
  6. if(score >= 540)
  7. {
  8. level = "优";
  9. }
  10. else if(score >= 480)
  11. {
  12. level = "良";
  13. }
  14. else if (score >= 420)
  15. {
  16. level = "中";
  17. }
  18. else if (score >= 360)
  19. {
  20. level = "差";
  21. }
  22. else
  23. {
  24. level = "不及格";
  25. }
  26. return level;
  27. }
  28. //从数据库读取每次考试成绩评语,并将数据显示到组合框中
  29. //查询考试成绩所处分段,并将这些信息在组合框中显示
  30. //定时查询语句
  31. //cbx01为控件combox名称
  32. ArrayList arylist = new ArrayList();
  33. string sql = "select distinct level from MScore";
  34. DataSet ds = DbOpera.GetDataSet(sql);
  35. if(ds.Tables[0].Rows.Count >0)
  36. {
  37. DataTable dt = ds.Tables[0];
  38. foreach (DataRow dr in dt.Rows)
  39. {
  40. arylist.Add(dr[0].ToString().Trim());
  41. }
  42. cbx01.DataSource = arylist;
  43. }
复制代码

4.根据查询条件,查询符合条件的数据,并使用DataGridView控件显示

  1. private void button3_Click(object sender, EventArgs e)
  2. {
  3. //查询考试总成绩大于查询值的成绩分布数据
  4. //定义查询语句
  5. string sql = "select Math,Chinese,English,Chemical,Physics,BIology,TotalScore,AvgScore from mscore where level ='" + cbx01.Text.ToString().Trim()+"'";
  6. //创建DataSet类的对象
  7. //datagridview1为控件datagridview名称
  8. DataSet ds = DbOpera.GetDataSet(sql);
  9. dataGridView1.DataSource = ds.Tables[0];
  10. dataGridView1.Columns[0].HeaderText = "数学";
  11. dataGridView1.Columns[1].HeaderText = "语文";
  12. dataGridView1.Columns[2].HeaderText = "英语";
  13. dataGridView1.Columns[3].HeaderText = "化学";
  14. dataGridView1.Columns[4].HeaderText = "物理";
  15. dataGridView1.Columns[5].HeaderText = "生物";
  16. dataGridView1.Columns[6].HeaderText = "总分";
  17. dataGridView1.Columns[7].HeaderText = "平均分";
  18. // 设置数据表格为只读
  19. dataGridView1.ReadOnly = true;
  20. //不允许添加行
  21. dataGridView1.AllowUserToAddRows = false;
  22. //背景为白色
  23. dataGridView1.BackgroundColor = Color.White;
  24. //只允许选中单行
  25. dataGridView1.MultiSelect = false;
  26. //整行选中
  27. dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
复制代码

动画演示效果

程序案例

程序打开后,需要添加数据库,数据库创建的内容见准备工作

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行