C#操作数据库总结(vs2005+sql2005)

C#操作数据库总结(vs2005+sql2005)

数据库连接

首先,需要引入 System.Data.SqlClient 命名空间,使用 SqlConnection 类来表示数据库连接。

建议使用 using 语句块来确保连接被正确释放:

using System.Data.SqlClient;
// ...
string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // TODO: 数据库操作
}

其中,connectionString 是连接字符串,可以指定连接的服务器地址、数据库名称、用户名和密码等参数。

执行 SQL 查询

使用 SqlCommand 类来执行 SQL 查询,假设需要查询 Person 表中的所有记录:

using (SqlCommand command = new SqlCommand("SELECT * FROM Person", connection))
{
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            // 读取记录的每个字段
            int id = reader.GetInt32(0);
            string name = reader.GetString(1);
            int age = reader.GetInt32(2);

            // TODO: 处理记录
        }
    }
}

其中,command.ExecuteReader() 执行查询并返回一个 SqlDataReader 对象,可以使用 reader 对象来读取查询结果的每条记录,reader.GetInt32(0)reader.GetString(1) 等方法可以读取每个字段的值。

如果希望执行 SQL 命令(不需要返回结果集),可以使用 command.ExecuteNonQuery() 方法,下面是一个插入记录的示例:

using (SqlCommand command = new SqlCommand("INSERT INTO Person (Name, Age) VALUES ('Tom', 20)", connection))
{
    command.ExecuteNonQuery();
}

参数化查询

在执行 SQL 查询或命令时,可以使用参数化查询来避免 SQL 注入攻击或提高程序的性能。参数化查询实际上是将 SQL 语句中变化的部分用参数代替。

例如,下面是一个参数化查询:

using (SqlCommand command = new SqlCommand("SELECT * FROM Person WHERE Name = @Name", connection))
{
    command.Parameters.AddWithValue("@Name", "Tom");

    using (SqlDataReader reader = command.ExecuteReader())
    {
        // ...
    }
}

其中,command.Parameters.AddWithValue("@Name", "Tom") 方法将参数 @Name 的值设置为 Tom,在 SQL 语句中使用 @Name 代替实际的值。

参数化查询有以下好处:

  • 避免 SQL 注入攻击,因为参数值不会被当作 SQL 语句的一部分来解释。
  • 提高程序的性能,因为数据库引擎可以缓存编译好的 SQL 语句。如果使用变量来代替常量值,则每次查询都需要编译成新的查询计划。

示例说明

示例一:查询员工信息并显示

下面是一个示例,假设数据库中有一个 Employee 表,存储了员工的姓名和工资信息。现在需要查询该表中工资大于 3000 的员工信息并在界面上显示。

首先,需要创建一个 Windows 窗口应用程序,界面上放置一个 DataGridView 控件用来显示查询结果。然后,添加以下代码:

private void btnQuery_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // 打开数据库连接
        connection.Open();

        // 创建 SQL 查询命令
        using (SqlCommand command = new SqlCommand("SELECT Name, Salary FROM Employee WHERE Salary > @Salary", connection))
        {
            // 添加参数
            command.Parameters.AddWithValue("@Salary", 3000);

            // 执行查询并读取结果集到 DataTable
            using (SqlDataAdapter adapter = new SqlDataAdapter(command))
            {
                DataTable table = new DataTable();
                adapter.Fill(table);

                // 设置 DataGridView 显示的数据源
                dataGridView1.DataSource = table;
            }
        }
    }
}

在查询按钮的 Click 事件中,创建 SqlConnectionSqlCommand 对象,然后添加参数并执行查询。最后,使用 SqlDataAdapter 将查询结果读取到一个 DataTable 中,将该 DataTable 设置为 DataGridView 控件的数据源。这样,当用户点击查询按钮时,程序会连接到数据库并显示查询结果。

示例二:添加员工信息

下面是另一个示例,假设需要添加一条新的员工信息到 Employee 表中。

首先,需要在界面上添加几个 TextBox 控件用来输入员工姓名和工资信息,然后添加一个“添加”按钮。然后,添加以下代码:

private void btnAdd_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // 打开数据库连接
        connection.Open();

        // 创建 SQL 查询命令
        using (SqlCommand command = new SqlCommand("INSERT INTO Employee(Name, Salary) VALUES (@Name, @Salary)", connection))
        {
            // 添加参数
            command.Parameters.AddWithValue("@Name", txtName.Text);
            command.Parameters.AddWithValue("@Salary", int.Parse(txtSalary.Text));

            // 执行命令并获取影响的行数
            int rowsAffected = command.ExecuteNonQuery();

            // 如果有影响的行数,表示插入成功
            if (rowsAffected > 0)
            {
                MessageBox.Show("添加成功!");
            }
            else
            {
                MessageBox.Show("添加失败!");
            }
        }
    }
}

在添加按钮的 Click 事件中,创建 SqlConnectionSqlCommand 对象,然后添加参数并执行查询。使用 int.Parse(txtSalary.Text)txtSalary 控件的文本内容解析为整数并作为参数值,在 command.ExecuteNonQuery() 方法中执行 INSERT 命令并获取受影响的行数,如果大于 0,则表示插入成功,否则表示插入失败。在成功或失败时,使用 MessageBox 弹出提示信息。

这样,当用户输入员工信息并点击“添加”按钮时,程序会连接到数据库并插入新的记录,根据插入结果弹出提示信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#操作数据库总结(vs2005+sql2005) - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • python上下文管理器协议的实现

    Python上下文管理器协议是Python中一种非常有用的技术,它允许我们更好地管理应用程序中的资源。在Python中,上下文管理器可以通过定义带有__enter__和__exit__方法的类来实现。这些方法可以用来初始化和清理资源,比如文件、数据库连接、锁等等。 下面是一些关于如何实现Python上下文管理器协议的步骤: 第一步:创建你的上下文管理器类 在…

    database 2023年5月21日
    00
  • Statement 和 PreparedStatement 的区别

    Statement和PreparedStatement都是Java中操作关系数据库的接口,它们有一定的区别。 Statement Statement提供了三种执行SQL语句的方法: execute(String sql): 可执行任何SQL语句。返回一个boolean值,表示执行的SQL语句是否返回ResultSet类型的结果集。 executeQuery(…

    database 2023年3月27日
    00
  • MySQL 配置文件 my.cnf / my.ini 区别解析

    MySQL 是一个常用的关系型数据库,而 my.cnf 或 my.ini 配置文件是 MySQL 的核心配置文件之一。在该配置文件中,你可以设置 MySQL 服务器的各项参数,以控制 MySQL 各个方面的运行行为和性能。 my.cnf 和 my.ini 配置文件的区别 在 Windows 操作系统上,MySQL 的默认配置文件是 my.ini,而在 Lin…

    database 2023年5月22日
    00
  • 详解MySQL CROSS JOIN:交叉连接

    MySQL CROSS JOIN是一种关系型连接操作,它将两个表的所有组合关系作为结果返回。对于每个表中的每行,它将与另一个表中的每行进行匹配,并创建一个新的结果表,其中每行将包含两个表中的所有列的结果。 CROSS JOIN语法如下: SELECT * FROM table1 CROSS JOIN table2; 这将将表1中的每个行与表2中的每个行组合,…

    MySQL 2023年3月9日
    00
  • Redis批量删除Key的三种方式小结

    下面是关于 Redis 批量删除 Key 的三种方式的详细讲解。 方式一:使用命令行删除 第一种方式是通过 Redis 命令行执行删除操作。我们可以使用 keys 命令来查找所有符合特定模式的 Key,然后使用 del 命令批量删除这些 Key。例如: redis> keys user:* 1) "user:1" 2) "…

    database 2023年5月22日
    00
  • SQLite 和 CouchDB 的区别

    SQLite和CouchDB是两种不同类型的数据库,有一定的不同之处。下面我详细讲解一下SQLite和CouchDB之间的区别: SQLite 什么是SQLite SQLite是一种嵌入式数据库,它是一个开源的SQL数据库,可以存储在本地磁盘上。SQLite数据存储在文件中,而不是在服务器上。因此,SQLite适合存储小型数据集的应用程序,如移动应用程序和桌…

    database 2023年3月27日
    00
  • redis中key的设置方法步骤

    Redis是一种基于内存的键值对数据库,它支持丰富的数据类型,同时也提供了强大的键管理机制。在Redis中,key是最基本的存储单位,下面我们就来详细讲解一下Redis中key的设置方法步骤。 1. 命令格式 在Redis中,设置一个key的语法结构非常简单,例如: SET key value 其中key表示键名,value表示键值。 2. 键名的命名规则 …

    database 2023年5月22日
    00
  • windows下重置mysql的root密码方法介绍

    下面是“windows下重置mysql的root密码方法介绍”的完整攻略。 第一步:停止mysql服务 在重置mysql的root密码之前,需要先停止mysql服务。可以通过windows的命令行工具或者mysql自带的停止命令进行停止。 使用windows命令行工具:打开命令行工具,输入以下命令并执行。 bash net stop mysql 使用mysq…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部