C#编写SqlHelper类的使用详解

1. SqlHelper类介绍

在C#开发中,数据库操作是十分常见的。数据库操作的核心就是对SQL语句的操作。对于一些常见的操作,我们可以封装在一个类中方便调用。而SqlHelper类就是用于封装常见数据库操作的类。

SqlHelper类封装了ADO.NET对象的创建和使用过程,简化了开发人员对ADO.NET的使用,主要提供以下几种功能:

封装常用的增删改查操作

支持事务处理

支持参数化查询

支持DataSet、DataTable、DataReader等数据对象的操作

2. SqlHelper类的使用

2.1 引用SqlHelper类

引用SqlHelper类需要在项目中添加一个SqlHelper.cs文件。SqlHelper类的代码如下:

public class SqlHelper

{

private static string connectionString = "server=localhost;database=mydb;uid=myuser;pwd=mypassword;";

public static SqlConnection CreateConnection()

{

SqlConnection connection = new SqlConnection(connectionString);

connection.Open();

return connection;

}

public static void CloseConnection(SqlConnection connection)

{

if (connection != null)

{

connection.Close();

}

}

public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)

{

using (SqlConnection connection = CreateConnection())

{

using (SqlCommand command = connection.CreateCommand())

{

command.CommandText = sql;

command.Parameters.AddRange(parameters);

return command.ExecuteNonQuery();

}

}

}

public static object ExecuteScalar(string sql, params SqlParameter[] parameters)

{

using (SqlConnection connection = CreateConnection())

{

using (SqlCommand command = connection.CreateCommand())

{

command.CommandText = sql;

command.Parameters.AddRange(parameters);

return command.ExecuteScalar();

}

}

}

public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters)

{

SqlConnection connection = CreateConnection();

using (SqlCommand command = connection.CreateCommand())

{

command.CommandText = sql;

command.Parameters.AddRange(parameters);

return command.ExecuteReader(CommandBehavior.CloseConnection);

}

}

public static DataSet ExecuteDataSet(string sql, params SqlParameter[] parameters)

{

DataSet ds = new DataSet();

using (SqlConnection connection = CreateConnection())

{

using (SqlDataAdapter adapter = new SqlDataAdapter())

{

adapter.SelectCommand = new SqlCommand(sql, connection);

adapter.SelectCommand.Parameters.AddRange(parameters);

adapter.Fill(ds);

}

}

return ds;

}

}

2.2 新建数据库连接

使用SqlHelper类进行数据库操作前,需要先建立连接。连接的创建可以由SqlHelper类的CreateConnection()方法完成。

以下代码演示了如何建立连接:

SqlConnection connection = SqlHelper.CreateConnection();

2.3 执行sql语句

执行sql语句有三种方式:ExecuteNonQuery、ExecuteScalar和ExecuteReader。

2.3.1 ExecuteNonQuery

用于执行增、删、改等操作的SQL语句,返回受影响的行数。

以下代码演示了如何执行sql语句:

string sql = "INSERT INTO [dbo].[user] ([name], [age]) VALUES (@name, @age)";

SqlParameter[] parameters = {

new SqlParameter("@name", "张三"),

new SqlParameter("@age", 18)

};

int count = SqlHelper.ExecuteNonQuery(sql, parameters);

2.3.2 ExecuteScalar

用于执行一些简单的查询语句,获取单行单列的值。例如:查询所有记录的个数。

以下代码演示了如何使用ExecuteScalar:

string sql = "SELECT COUNT(*) FROM [dbo].[user]";

object count = SqlHelper.ExecuteScalar(sql);

2.3.3 ExecuteReader

用于执行一些比较复杂的查询语句,例如:使用SELECT语句查询数据表的所有数据。

以下代码演示了如何使用ExecuteReader:

string sql = "SELECT * FROM [dbo].[user]";

SqlDataReader reader = SqlHelper.ExecuteReader(sql);

while (reader.Read())

{

int id = (int)reader["id"];

string name = (string)reader["name"];

int age = (int)reader["age"];

}

2.4 查询数据

SqlHelper类中提供了ExecuteDataSet方法用于查询数据,该方法返回查询结果的DataSet对象。

以下代码演示了如何使用ExecuteDataSet方法:

string sql = "SELECT * FROM [dbo].[user]";

DataSet ds = SqlHelper.ExecuteDataSet(sql);

foreach (DataRow row in ds.Tables[0].Rows)

{

int id = (int)row["id"];

string name = (string)row["name"];

int age = (int)row["age"];

}

2.5 参数化查询

在执行Sql语句时,为了避免SQL注入攻击,使用参数化查询是比较好的选择。SqlHelper类提供了支持参数化查询的方法。

以下代码演示了如何使用参数化查询:

string sql = "SELECT * FROM [dbo].[user] WHERE [name]=@name AND [age]=@age";

SqlParameter[] parameters = {

new SqlParameter("@name", "张三"),

new SqlParameter("@age", 18)

};

SqlDataReader reader = SqlHelper.ExecuteReader(sql, parameters);

while (reader.Read())

{

int id = (int)reader["id"];

string name = (string)reader["name"];

int age = (int)reader["age"];

}

2.6 事务处理

SqlHelper类也提供了事务处理的支持。使用SqlHelper类实现事务的步骤如下:

开启事务

执行SQL语句

判断是否出现异常

提交或回滚事务

以下代码演示了如何实现事务处理:

SqlConnection connection = SqlHelper.CreateConnection();

SqlTransaction transaction = connection.BeginTransaction();

try

{

string sql1 = "INSERT INTO [dbo].[user] ([name], [age]) VALUES ('张三', 18)";

string sql2 = "UPDATE [dbo].[user] SET [age]=19 WHERE [name]='张三'";

SqlHelper.ExecuteNonQuery(sql1);

SqlHelper.ExecuteNonQuery(sql2);

transaction.Commit();

}

catch (Exception ex)

{

transaction.Rollback();

}

finally

{

SqlHelper.CloseConnection(connection);

}

3. 总结

通过上文的介绍,我们学习到了SqlHelper类的功能和使用方法。SqlHelper类的封装了常见数据库操作,使用SqlHelper类可以简化开发人员对ADO.NET的使用。

后端开发标签