如何使用C#与SQL Server数据库进行交互

一.创建数据库

用VS 创建数据库的步骤:

1.打开vs,创建一个新项目,分别在搜素框中选择C#、Windows、桌面,然后选择Windows窗体应用(.NET Framework)

2.打开"视图-服务器资源管理器",右键单击"数据连接",如图。在弹出的菜单中选择【创建新SQL Server 数据库】选项,弹出"创建新的SQL Server数据库"对话框。

3.对应项目,系统添加数据库连接。(要是电脑没有sql server,可以选中"视图-sql server资源管理器"创建数据库)

连接成功即如下(第一次可能只有一个)

4.新建数据库XSCJDB(学生成绩数据库),点开第二个小三角-右键点击数据库-添加新数据库

自己取名(最好采用英文命名)

5.选中该数据库并创建新表student,点击新建数据库前的小三角-右键表-添加新表

6.表中插入属性,双击即可打开

7.右键选中表查看表中数据

二.使用控件实现连接数据库并对其操作

(1)在工具箱中拖出dataGridView控件和botton控件(可以改名使其功能明确)

(2)双击botton1,进入代码编写(检查数据库的连接)

复制代码
 private void button1_Click(object sender, EventArgs e)
 { 
     string strcom = @"Data Source = (localdb)ProjectModels;Initial Catalog = XSCJDB; Integrated Security = True;";
     SqlConnection sqlcon;
     using (sqlcon = new SqlConnection(strcom))
     {
         sqlcon.Open();
         MessageBox.Show("数据库连接状态" + sqlcon.State.ToString(), "第一个对话框");
     }
     MessageBox.Show("数据库连接状态" + sqlcon.State.ToString(), "第二个对话框");

 }

注意:

此处应根据自己的电脑修改,具体步骤如下:

单击刚建的数据库-在右下角解决方案资源管理器中找到连接字符串-复制第一个True前面的内容

(3)双击双击botton2,进入代码编写(插入数据)

复制代码
  private void button2_Click(object sender, EventArgs e)
  {
      string strcom = @"Data Source = (localdb)ProjectModels;Initial Catalog = XSCJDB; Integrated Security = True;";
      SqlConnection conn =null;
      try
      {
          conn = new SqlConnection(strcom);
          conn.Open();

          SqlCommand mycmm= new SqlCommand();
          mycmm.Connection = conn;

          mycmm.CommandType = CommandType.Text;
          mycmm.CommandText = @"insert into
                             student(Id,name,major,grade,tel)
                             values(@Id,@name,@major,@grade,@tel)";
          mycmm.Parameters.Add(new SqlParameter("@Id", 2022002));
          mycmm.Parameters.Add(new SqlParameter("@name", "李四"));
          mycmm.Parameters.Add(new SqlParameter("@major", "CS"));
          mycmm.Parameters.Add(new SqlParameter("@grade","80"));
          mycmm.Parameters.Add(new SqlParameter("@tel","13999216"));

          int returnvalue=mycmm.ExecuteNonQuery();

          if(returnvalue!=-1)
          {
              MessageBox.Show("数据插入成功");
          }
      }
      catch(Exception ex) 
      {
          if(conn != null)
          {
              MessageBox.Show("数据插入失败" + ex.Message);
          }
      }
  }

(4)双击双击botton3,进入代码编写(查询全部数据)

复制代码
 // 处理button3的点击事件,从数据库中查询并显示所有数据
 private void button3_Click(object sender, EventArgs e)
 {
     // 数据库连接字符串
     string strcom = @"Data Source = (localdb)ProjectModels;Initial Catalog = XSCJDB; Integrated Security = True;";
     SqlConnection conn = null;

     try
     {
         // 初始化并打开数据库连接
         conn = new SqlConnection(strcom);
         conn.Open();

         // 创建并配置SqlCommand对象
         SqlCommand mycmm = new SqlCommand
         {
             Connection = conn,
             CommandType = CommandType.Text,
             CommandText = @"select * from student"
         };

         // 使用SqlDataAdapter填充DataSet
         SqlDataAdapter sda = new SqlDataAdapter(mycmm);
         DataSet ds = new DataSet();
         sda.Fill(ds, "studentList");

         // 显示查询结果到DataGridView
         dataGridView2.DataSource = ds.Tables["studentList"].DefaultView;

         // 关闭数据库连接
         conn.Close();
     }
     catch (Exception ex)
     {
         // 处理异常
         MessageBox.Show(ex.Message);
         if (conn != null)
         {
             conn.Close();
         }
     }
 }

(5)在设计界面再拖入botton以及一个textbox(用于根据姓名查询)

(6)编写botton4代码(按名字查询)

复制代码
       // 处理button4的点击事件,根据名字查询数据
       private void button4_Click(object sender, EventArgs e)
       {
           // 数据库连接字符串
           string strcon = @"Data Source = (localdb)ProjectModels;Initial Catalog = XSCJDB; Integrated Security = True;";
           SqlConnection myConnection = new SqlConnection(strcon);

           try
           {
               // 打开数据库连接
               myConnection.Open();

               // 创建并配置SqlCommand对象
               SqlCommand myCommand = new SqlCommand
               {
                   Connection = myConnection,
                   CommandType = CommandType.Text,
                   CommandText = @"select * from student where name =@name"
               };

               // 添加参数并赋值
               myCommand.Parameters.Add(new SqlParameter("@name", textBox1.Text));

               // 执行查询命令并检查结果
               int res = Convert.ToInt32(myCommand.ExecuteScalar());
               if (res == 0)
               {
                   throw new Exception("查无此人");
               }

               // 使用SqlDataAdapter填充DataSet
               SqlDataAdapter sda = new SqlDataAdapter(myCommand);
               DataSet ds = new DataSet();
               sda.Fill(ds, "xr");

               // 显示查询结果到DataGridView
               dataGridView2.DataSource = ds.Tables["xr"].DefaultView;

               // 关闭数据库连接
               myConnection.Close();
           }
           catch (Exception ex)
           {
               // 处理异常
               MessageBox.Show(ex.ToString());
               if (myConnection != null)
               {
                   myConnection.Close();
               }
           }
       }

(7)对于dataGritView的代码

复制代码
// 保存编辑单元格的原始值
object cellTempValue = null;
 
// 单元格开始编辑事件
private void dataGridView2_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
    // 保存单元格的原始值
    cellTempValue = this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
}
 
// 单元格结束编辑事件
private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    // 如果单元格值没有改变,返回
    if (object.Equals(cellTempValue, this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value))
    {
        return;
    }
 
    // 弹出确认修改对话框
    if (MessageBox.Show("是否确定修改,并更新到数据库", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
    {
        // 如果取消修改,恢复原值
        this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = cellTempValue;
        return;
    }
 
    // 数据库连接字符串
    string strcom = @"your string";
    SqlConnection myConnection = new SqlConnection(strcom);
 
    try
    {
        // 打开数据库连接
        myConnection.Open();
 
        // 创建并配置SqlCommand对象
        SqlCommand myCommand = new SqlCommand
        {
            Connection = myConnection,
            CommandType = CommandType.Text
        };
 
        // 构建更新SQL语句
        string strSql = String.Format(
            "update student set {0}='{1}' where Id='{2}'",
            this.dataGridView2.Columns[e.ColumnIndex].HeaderText, // 当前选择的列名
            this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value, // 选中单元格修改后的值
            this.dataGridView2.Rows[e.RowIndex].Cells[0].Value // 选中单元格修改前的值
        );
 
        // 设置命令文本
        myCommand.CommandText = strSql;
 
        // 执行更新命令
        int res = myCommand.ExecuteNonQuery();
 
        // 检查更新是否成功
        if (res == 0)
        {
            throw new Exception("修改失败");
        }
        else
        {
            MessageBox.Show("修改成功");
        }
 
        // 关闭数据库连接
        myConnection.Close();
    }
    catch (Exception ex)
    {
        // 处理异常
        MessageBox.Show(ex.ToString());
        if (myConnection != null)
        {
            myConnection.Close();
        }
    }
}

三.实现

1.设计界面

2.运行

2.1连接数据库(点击连接数据库-确定-确定)即连接成功

2.2增加数据
2.3查询全部数据
2.4按名字查询

四.小结及易错点

这个Windows Forms应用程序展示了如何连接本地数据库XSCJDB,并实现了数据插入、查询和删除等基本功能。以下是对该应用程序的小结:

  1. 数据库连接与测试:通过点击按钮可以测试与数据库的连接,确保应用程序能够成功连接到本地数据库XSCJDB。

  2. 数据插入:点击相应按钮可以将预设的学生信息插入到数据库的student表中,这提供了一种简单的数据录入方式。

  3. 数据查询:通过点击按钮,应用程序能够查询并显示student表中的所有数据,使用户可以轻松地查看数据库中存储的信息。

  4. 按姓名查询:应用程序还提供了按姓名查询学生数据的功能,用户只需输入学生姓名,即可获取相应的学生信息。

  5. 数据删除:用户可以根据学生姓名删除相应的学生记录,这增加了对数据的管理和维护功能。

在编写这个应用程序时,需要注意以下易错点:

  • 数据库连接字符串的正确性:确保连接字符串中的数据库名称、实例名称等信息正确无误,以保证成功连接到数据库。
  • SQL语句的准确性:编写SQL语句时,应确保表名和字段名与数据库中定义的一致,以避免出现语法错误。
  • 参数化查询的使用:在执行SQL操作时,应该使用参数化查询来防止SQL注入攻击,提高数据安全性。
  • 数据库连接的管理:在编写代码时,应该使用try-finally块或者using语句来管理数据库连接,确保在异常情况下正确关闭连接,以避免资源泄漏。
  • 异常处理和错误提示:捕获并处理所有可能的异常,向用户提供友好的错误提示信息,帮助用户理解问题所在并采取相应的措施。

通过对这些易错点的注意和处理,可以确保应用程序的稳定性、安全性和用户友好性。同时,还可以考虑进一步优化应用程序的功能和性能,提升用户体验。

相关推荐
xb11321 小时前
# SQL基础知识学习指南
数据库·sql·oracle
huan1991102 小时前
nacos2.3.0 接入pgsql或其他数据库
数据库
changhong19862 小时前
mybatisPlus打印sql配置
数据库·sql
l1t2 小时前
用官方安装脚本安装duckdb 1.5并测试加载各种插件
数据库·docker·postgresql·kylin
jinanmichael2 小时前
Mybatis控制台打印SQL执行信息(执行方法、执行SQL、执行时间)
数据库·sql·mybatis
J2虾虾2 小时前
给Redis增加密码
数据库·redis·缓存
Mr数据杨2 小时前
【Dv3Admin】Django通用自定义工作台卡片
数据库·django·sqlite
山峰哥3 小时前
SQL优化全攻略:从索引策略到Explain实战解析
大数据·数据库·sql·oracle·性能优化·编辑器
JuneXcy3 小时前
第9章 关系模式的规范化设计理论
数据库·mysql