通过访问学生课程数据库中的表,设计数据库中函数,并编写嵌入式程序,使用vs和c#

要求:

        1.查询某一门课程的信息。要查询的课程由用户在程序运行过程中指定,放在主变量中

           2.查询选修某一门课程的选课信息,要查询的课程号由用户在程序运行过程中指定,放在主变量中,然后根据用户的要求修改其中某些记录的成绩字段

准备工作:

        首先在vs中选择c#

打开,然后在项目中的nuget库中,安装MySQL.DATA包

然后vs就可以运行mysql相应的函数。

实现1:

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 数据库2._1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string connStr = "server=127.0.0.1;port=3306;user=root;password=yourpassword;database=s-t;";
            using (MySqlConnection connection = new MySqlConnection(connStr))
            {
                try
                {
                    Console.WriteLine("Connecting to MySQL...");
                    connection.Open();

                    // 用户输入课程名称  
                    Console.Write("Enter the course name to query: ");
                    string courseName = Console.ReadLine();

                    // 构造SQL查询语句  
                    string query = "SELECT * FROM course WHERE cname = @CourseName";
                    using (MySqlCommand command = new MySqlCommand(query, connection))
                    {
                        // 使用参数化查询来避免SQL注入  
                        command.Parameters.AddWithValue("@CourseName", courseName);

                        using (MySqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                int cno = reader.GetInt32("cno");
                                string cname = reader.GetString("cname");
                                string cpno = reader.GetString("cpno");
                                int ccredit = reader.GetInt32("ccredit");

                                // 输出课程信息  
                                Console.WriteLine("Cno: {0}, cName: {1}, Cpno: {2} , Ccredit: {3}", cno, cname, cpno,ccredit);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }

            Console.WriteLine("Done.");
        }
    }
}

(数据库链接的password自己修改为自己的password哦!)

运行结果:

小结1:

  • 程序使用了MySql.Data.MySqlClient命名空间提供的类和方法来连接MySQL数据库,并执行查询操作。
  • 用户可以输入要查询的课程名称。
  • 程序通过使用参数化查询来避免SQL注入攻击。
  • 使用MySqlCommand对象的ExecuteReader()方法执行查询,并通过MySqlDataReader对象读取查询结果。
  • 程序通过读取MySqlDataReader对象的字段值,将查询结果输出到控制台。

难点分析1:

  • 使用MySQL数据库连接:程序中使用了MySqlConnection类和相关方法来建立与MySQL数据库的连接,需要确保数据库服务器已启动并且提供了正确的连接字符串。
  • 参数化查询:为了避免SQL注入攻击,程序使用了参数化查询。这涉及到使用MySqlCommand对象的Parameters属性和AddWithValue()方法来设置查询参数。
  • 执行查询和读取结果:程序通过调用MySqlCommand对象的ExecuteReader()方法执行查询,并通过MySqlDataReader对象来逐行读取查询结果。需要注意使用正确的字段名来读取数据。
  • 异常处理:程序中使用了异常处理机制来捕获可能发生的异常,并将异常信息输出到控制台。

实现2:

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;

namespace 数据库2._2
{
    internal class Program
    {
        static string connectionString = "server=localhost;user=root;database=s-t;port=3306;password=yourpassword;"; // 替换为你的连接字符串  

        static void Main(string[] args)
        {
            string courseId = GetUserInput("请输入课程号:");

            // 查询选课信息  
            DataTable courseSelections = QueryCourseSelections(courseId);
            DisplayCourseSelections(courseSelections);

            // 假设用户已经选择了要修改的学号和新的成绩  
            string studentId = GetUserInput("请输入要修改成绩的学号:");
            string newGradeString = GetUserInput("请输入新的成绩:");
            decimal newGrade = decimal.Parse(newGradeString);

            // 更新成绩  
            if (UpdateGrade(courseId, studentId, newGrade))
            {
                Console.WriteLine("成绩更新成功!");
            }
            else
            {
                Console.WriteLine("未找到该学生的选课信息或更新失败。");
            }

            Console.ReadLine(); // 等待用户按键退出  
        }

        static DataTable QueryCourseSelections(string courseId)
        {
            DataTable dt = new DataTable();
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                connection.Open();
                string sql = "SELECT * FROM sc WHERE cno = @courseId";
                using (MySqlCommand command = new MySqlCommand(sql, connection))
                {
                    command.Parameters.AddWithValue("@courseId", courseId);
                    using (MySqlDataAdapter adapter = new MySqlDataAdapter(command))
                    {
                        adapter.Fill(dt);
                    }
                }
            }
            return dt;
        }

        static void DisplayCourseSelections(DataTable dt)
        {
            foreach (DataRow row in dt.Rows)
            {
                Console.WriteLine($"sno: {row["sno"]}, cno:{row["cno"]},成绩: {row["grade"]}");
            }
        }

        static bool UpdateGrade(string courseId, string studentId, decimal newGrade)
        {
            bool success = false;
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                connection.Open();
                string sql = "UPDATE sc SET grade = @newGrade WHERE cno = @courseId AND sno = @studentId";
                using (MySqlCommand command = new MySqlCommand(sql, connection))
                {
                    command.Parameters.AddWithValue("@newGrade", newGrade);
                    command.Parameters.AddWithValue("@courseId", courseId);
                    command.Parameters.AddWithValue("@studentId", studentId);
                    int rowsAffected = command.ExecuteNonQuery();
                    success = rowsAffected > 0;
                }
            }
            return success;
        }
        

        static string GetUserInput(string prompt)
        {
            Console.Write(prompt);
            return Console.ReadLine();
        }
    }
}

        运行结果:

这就是修改成功了。

小结2:

  • 程序通过使用MySql.Data.MySqlClient命名空间提供的类和方法连接MySQL数据库,并执行查询和更新操作。
  • 使用参数化查询可以有效防止SQL注入攻击,避免了潜在的安全风险。
  • 通过使用DataTable和DataAdapter来处理查询结果,使得结果集能够方便地被读取和显示。
  • 更新操作通过执行UPDATE语句来实现,根据所影响的行数判断是否更新成功。

难点分析2:

  • 使用MySQL数据库连接:程序中使用了MySqlConnection类和相关方法来建立与MySQL数据库的连接,需要确保数据库服务器已启动并且提供了正确的连接字符串。
  • 参数化查询:为了防止SQL注入攻击,程序使用了参数化查询。这涉及到使用MySqlCommand对象的Parameters属性和AddWithValue()方法来设置查询参数。
  • 数据表和数据适配器:程序使用了DataTable对象和MySqlDataAdapter来处理查询结果。这些类可以方便地将结果集填充到DataTable中,并提供了对数据的操作和显示功能。
  • 数据转换和异常处理:程序中有一些涉及数据转换的地方,比如将新成绩从字符串转换为decimal类型。此外,还需要处理可能发生的异常情况,如连接数据库失败或更新操作失败

实验总结: 

        1.这两个代码示例都是基于C#语言和MySQL数据库的操作,实现了对MySQL数据库的连接、查询和更新等基本操作。它们展示了如何使用C#中的MySql.Data.MySqlClient命名空间提供的类和方法来连接和操作MySQL数据库。

        2.总体而言,这些示例程序提供了一个关于如何使用C#连接和操作MySQL数据库的基本流程和范例。通过学习这些示例程序,我们可以了解到如何使用C#编写与MySQL数据库交互的程序,包括建立连接、执行查询和更新操作、读取执行结果等。

        3.此外,这些示例程序还展示了一些特别重要的操作,如参数化查询和异常处理。这些技术可以有效地防止SQL注入攻击,并保证程序在出现异常情况时能够正确地处理异常信息。

        4.在实际的开发工作中,我们需要根据具体的需求和业务场景来使用这些技术和方法,以实现更加高效和安全的数据库操作。同时,我们还需要遵循相关的安全规范和最佳实践,确保数据库的数据安全和保密性。

建表请参考:

https://blog.youkuaiyun.com/m0_74749240/article/details/139103909?spm=1001.2014.3001.5501 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值