前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >WinForm项目实战——调用存储过程

WinForm项目实战——调用存储过程

作者头像
郑子铭
发布2025-03-24 15:08:58
发布2025-03-24 15:08:58
5300
代码可运行
举报
运行总次数:0
代码可运行

在WinForm项目开发中,与数据库进行交互是一项核心任务。存储过程作为数据库中预编译的可执行代码块,具有提高性能、增强安全性和可维护性等优点。本文将通过一个实际项目案例,详细介绍如何在WinForm中调用存储过程,帮助开发者更好地掌握这一关键技术。

一、项目需求分析

假设我们正在开发一个简单的员工管理系统,需要实现员工信息的查询、添加、更新和删除功能。为了提高数据库操作的效率和安全性,我们决定使用存储过程来处理这些操作。

二、数据库准备

  1. 创建数据库和表:首先,在SQL Server中创建一个名为EmployeeDB的数据库,并在其中创建一个Employees表,表结构如下:
代码语言:javascript
代码运行次数:0
运行
复制
CREATE DATABASE EmployeeDB;
GO

USE EmployeeDB;
GO

CREATETABLE Employees (
    EmployeeID INT PRIMARY KEYIDENTITY(1,1),
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    Department NVARCHAR(50),
    Salary DECIMAL(10, 2)
);
  1. 创建存储过程:接下来,为员工信息的查询、添加、更新和删除功能分别创建存储过程。
    • 查询员工信息
代码语言:javascript
代码运行次数:0
运行
复制
CREATE PROCEDURE GetEmployees
AS
BEGIN
    SELECT * FROM Employees;
END;
代码语言:javascript
代码运行次数:0
运行
复制
- **添加员工信息**:
代码语言:javascript
代码运行次数:0
运行
复制
CREATE PROCEDURE AddEmployee
    @FirstName NVARCHAR(50),
    @LastName NVARCHAR(50),
    @Department NVARCHAR(50),
    @Salary DECIMAL(10, 2)
AS
BEGIN
    INSERT INTO Employees (FirstName, LastName, Department, Salary)
    VALUES (@FirstName, @LastName, @Department, @Salary);
END;
代码语言:javascript
代码运行次数:0
运行
复制
- **更新员工信息**:
代码语言:javascript
代码运行次数:0
运行
复制
CREATE PROCEDURE UpdateEmployee
    @EmployeeID INT,
    @FirstName NVARCHAR(50),
    @LastName NVARCHAR(50),
    @Department NVARCHAR(50),
    @Salary DECIMAL(10, 2)
AS
BEGIN
    UPDATE Employees
    SET FirstName = @FirstName,
        LastName = @LastName,
        Department = @Department,
        Salary = @Salary
    WHERE EmployeeID = @EmployeeID;
END;
代码语言:javascript
代码运行次数:0
运行
复制
- **删除员工信息**:
代码语言:javascript
代码运行次数:0
运行
复制
CREATE PROCEDURE DeleteEmployee
    @EmployeeID INT
AS
BEGIN
    DELETE FROM Employees
    WHERE EmployeeID = @EmployeeID;
END;

三、WinForm界面设计

在Visual Studio中创建一个新的WinForm项目,设计界面如下:

  1. 查询功能:添加一个DataGridView控件用于显示查询结果,一个Button控件用于触发查询操作。
  2. 添加功能:添加四个TextBox控件分别用于输入员工的姓、名、部门和工资,一个Button控件用于添加员工信息。
  3. 更新功能:在DataGridView中选中要更新的员工记录后,将信息显示在对应的TextBox控件中,用户修改后点击“更新”按钮进行更新操作。
  4. 删除功能:在DataGridView中选中要删除的员工记录,点击“删除”按钮进行删除操作。

四、代码实现

  1. 添加数据库连接引用:在项目中添加对System.Data.SqlClient命名空间的引用,用于与SQL Server数据库进行交互。
代码语言:javascript
代码运行次数:0
运行
复制
using System.Data.SqlClient;
  1. 查询员工信息:在“查询”按钮的点击事件中编写代码调用GetEmployees存储过程。
代码语言:javascript
代码运行次数:0
运行
复制
private void btnQuery_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=EmployeeDB;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD";
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand("GetEmployees", connection);
        command.CommandType = CommandType.StoredProcedure;

        try
        {
            connection.Open();
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            DataTable dataTable = new DataTable();
            adapter.Fill(dataTable);
            dataGridView1.DataSource = dataTable;
        }
        catch (Exception ex)
        {
            MessageBox.Show("查询失败:" + ex.Message);
        }
    }
}
  1. 添加员工信息:在“添加”按钮的点击事件中编写代码调用AddEmployee存储过程。
代码语言:javascript
代码运行次数:0
运行
复制
private void btnAdd_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=EmployeeDB;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD";
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand("AddEmployee", connection);
        command.CommandType = CommandType.StoredProcedure;

        command.Parameters.AddWithValue("@FirstName", textBox1.Text);
        command.Parameters.AddWithValue("@LastName", textBox2.Text);
        command.Parameters.AddWithValue("@Department", textBox3.Text);
        command.Parameters.AddWithValue("@Salary", decimal.Parse(textBox4.Text));

        try
        {
            connection.Open();
            command.ExecuteNonQuery();
            MessageBox.Show("员工添加成功!");
            btnQuery_Click(null, null); // 刷新查询结果
        }
        catch (Exception ex)
        {
            MessageBox.Show("添加失败:" + ex.Message);
        }
    }
}
  1. 更新员工信息:在“更新”按钮的点击事件中编写代码调用UpdateEmployee存储过程。
代码语言:javascript
代码运行次数:0
运行
复制
private void btnUpdate_Click(object sender, EventArgs e)
{
    if (dataGridView1.SelectedRows.Count > 0)
    {
        int employeeID = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["EmployeeID"].Value);
        string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=EmployeeDB;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand("UpdateEmployee", connection);
            command.CommandType = CommandType.StoredProcedure;

            command.Parameters.AddWithValue("@EmployeeID", employeeID);
            command.Parameters.AddWithValue("@FirstName", textBox1.Text);
            command.Parameters.AddWithValue("@LastName", textBox2.Text);
            command.Parameters.AddWithValue("@Department", textBox3.Text);
            command.Parameters.AddWithValue("@Salary", decimal.Parse(textBox4.Text));

            try
            {
                connection.Open();
                command.ExecuteNonQuery();
                MessageBox.Show("员工信息更新成功!");
                btnQuery_Click(null, null); // 刷新查询结果
            }
            catch (Exception ex)
            {
                MessageBox.Show("更新失败:" + ex.Message);
            }
        }
    }
    else
    {
        MessageBox.Show("请选择要更新的员工记录!");
    }
}
  1. 删除员工信息:在“删除”按钮的点击事件中编写代码调用DeleteEmployee存储过程。
代码语言:javascript
代码运行次数:0
运行
复制
private void btnDelete_Click(object sender, EventArgs e)
{
    if (dataGridView1.SelectedRows.Count > 0)
    {
        int employeeID = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["EmployeeID"].Value);
        string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=EmployeeDB;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand("DeleteEmployee", connection);
            command.CommandType = CommandType.StoredProcedure;

            command.Parameters.AddWithValue("@EmployeeID", employeeID);

            try
            {
                connection.Open();
                command.ExecuteNonQuery();
                MessageBox.Show("员工记录删除成功!");
                btnQuery_Click(null, null); // 刷新查询结果
            }
            catch (Exception ex)
            {
                MessageBox.Show("删除失败:" + ex.Message);
            }
        }
    }
    else
    {
        MessageBox.Show("请选择要删除的员工记录!");
    }
}

五、总结

通过以上步骤,我们成功地在WinForm项目中实现了调用存储过程来完成员工信息的查询、添加、更新和删除功能。在实际项目开发中,根据不同的业务需求,存储过程的逻辑和参数可能会更加复杂。但掌握了基本的调用方法和原理后,开发者可以灵活地运用存储过程,提高数据库操作的效率和安全性,为WinForm应用程序提供更强大的数据处理能力。同时,在代码实现过程中,要注意异常处理和数据库连接的管理,确保程序的稳定性和可靠性。随着项目规模的扩大和业务的发展,合理地使用存储过程和其他数据库技术,将有助于打造出高质量、高性能的WinForm应用程序。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、项目需求分析
  • 二、数据库准备
  • 三、WinForm界面设计
  • 四、代码实现
  • 五、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档