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

一.创建数据库

        用VS 创建数据库的步骤如下:

        (1)启动VS ,打开“服务器资源管理器”窗口,右键单击“数据连接”,如图。在弹出的菜单中选择【创建新SQL Server 数据库】选项,弹出“创建新的SQL Server数据库”对话框。

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

        (3)创建成功后会有源数据库以及其镜像(我们后续操作都在镜像完成就好)        

        (4)新建数据库XSCJDB(学生成绩数据库)

        

        (5)选中该数据库并创建新表student。

        (6)表中插入属性

        (7)可右键选中表查看表中数据

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

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

        (2)双击botton1,进入代码编写(检查链接)

// 处理button1的点击事件,测试数据库连接
private void button1_Click(object sender, EventArgs e)
{
    // 数据库连接字符串
    string strcom = @"your string";
    SqlConnection sqlcon;

    // 使用using语句自动处理数据库连接的释放
    using (sqlcon = new SqlConnection(strcom))
    {
        // 打开数据库连接
        sqlcon.Open();
        // 显示数据库连接状态
        MessageBox.Show("数据库连接状态" + sqlcon.State.ToString(), "第一个对话框");
    }
    // 显示数据库连接状态
    MessageBox.Show("数据库连接状态" + sqlcon.State.ToString(), "第二个对话框");
}

        值得注意的是:数据库链接字符串,先点击XSVJDB

右边的属性列就会有连接字符串

只需选中至字符串出现第一个true;便可正常连接。

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

 // 处理button2的点击事件,插入数据到数据库
 private void button2_Click(object sender, EventArgs e)
 {
     // 数据库连接字符串
     string strcom = @"your string";
     SqlConnection conn = null;

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

         // 创建并配置SqlCommand对象
         SqlCommand mycmm = new SqlCommand
         {
             Connection = conn,
             CommandType = CommandType.Text,
             CommandText = @"insert into student(Id,name,major,grade,tel) values(@Id,@name,@major,@grade,@tel)"
         };

         // 添加参数并赋值
         mycmm.Parameters.Add(new SqlParameter("@Id", 2022003));
         mycmm.Parameters.Add(new SqlParameter("@name", "王五"));
         mycmm.Parameters.Add(new SqlParameter("@major", "CS"));
         mycmm.Parameters.Add(new SqlParameter("@grade", "40"));
         mycmm.Parameters.Add(new SqlParameter("@tel", "1837334"));

         // 执行插入命令
         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 = @"your string";
    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 = @"your string";
    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();
        }
    }
}

              (8)对于botton5(删除)

 // 处理button5的点击事件,删除数据
 private void button5_Click(object sender, EventArgs e)
 {
     // 数据库连接字符串
     string strcom = @"your string;";
     SqlConnection myConnection = new SqlConnection(strcom);

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

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

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

         // 执行删除命令
         int res = myCommand.ExecuteNonQuery();

         // 检查删除是否成功
         if (res == 0)
         {
             MessageBox.Show("删除失败,未找到对应的记录");
         }
         else
         {
             MessageBox.Show("删除成功");
             // 更新DataGridView显示
             button3_Click(sender, e);
         }

         // 关闭数据库连接
         myConnection.Close();
     }
     catch (Exception ex)
     {
         // 处理异常
         MessageBox.Show("删除失败: " + ex.Message);
         if (myConnection != null)
         {
             myConnection.Close();
         }
     }
 }

三.实现

        

四.小结及易错点

小结

本代码实现了一个简单的Windows Forms应用程序,能够连接本地数据库XSCJDB,并进行数据插入、查询和删除操作。主要功能如下:

  1. 连接数据库:通过点击button1,测试与数据库的连接。
  2. 插入数据:通过点击button2,将固定的学生信息插入到数据库的student表中。
  3. 查看数据:通过点击button3,查询并显示student表中的所有数据。
  4. 按姓名查询数据:通过点击button4,根据textBox1中的姓名查询并显示相应的学生数据。
  5. 删除数据:通过点击button5,根据textBox1中的姓名删除相应的学生记录。
易错点
  1. 数据库连接字符串错误

    • 确保连接字符串正确无误,特别是数据库名称、实例名称等。
    • 本示例使用的连接字符串为:@"Data Source = (localdb)\ProjectModels; Initial Catalog = XSCJDB; Integrated Security = True;"。在实际应用中可能需要调整。
  2. SQL语句错误

    • 确保所有SQL语句正确无误,特别是表名和字段名必须与数据库中定义的一致。
    • 示例中的表名为student,字段名为Id, name, major, grade, tel
  3. 参数化查询

    • 使用参数化查询防止SQL注入攻击。
    • 在插入、查询和删除操作中,使用SqlParameter添加参数,确保安全性。
  4. 数据库连接管理

    • 使用using语句或确保在异常情况下正确关闭数据库连接。
    • 本示例中,所有数据库连接均在try-finally块中管理,确保在异常情况下关闭连接。
  5. 异常处理

    • 捕获并处理所有可能的异常,向用户显示有用的错误信息。
    • 在示例中,捕获了所有异常并通过MessageBox显示错误信息。
  6. 数据更新和UI同步

    • 确保在数据插入、删除或修改后及时更新UI显示。
    • 在删除操作成功后,通过调用button3_Click更新DataGridView显示。

  • 36
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值