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 事件中,创建 SqlConnection
和 SqlCommand
对象,然后添加参数并执行查询。最后,使用 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 事件中,创建 SqlConnection
和 SqlCommand
对象,然后添加参数并执行查询。使用 int.Parse(txtSalary.Text)
将 txtSalary
控件的文本内容解析为整数并作为参数值,在 command.ExecuteNonQuery()
方法中执行 INSERT 命令并获取受影响的行数,如果大于 0,则表示插入成功,否则表示插入失败。在成功或失败时,使用 MessageBox
弹出提示信息。
这样,当用户输入员工信息并点击“添加”按钮时,程序会连接到数据库并插入新的记录,根据插入结果弹出提示信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#操作数据库总结(vs2005+sql2005) - Python技术站