Skip to content

Commit 3c30fef

Browse files
committed
add readme file
1 parent 773c0a7 commit 3c30fef

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed

README.md

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# SQLServerHelper
2+
3+
适用于 C# 的 SQL Server 连接辅助类,提供了对数据库的常用操作,包括执行 SQL 语句、按流的方式读取数据、填充本地 DataSet、批量提交对数据表的修改等。
4+
5+
## 构造函数
6+
7+
SQLServerHelper 对象有三种构造方式:使用用户名密码验证的构造函数、使用 Windows 身份验证的构造函数、使用连接字符串的构造函数。
8+
9+
```csharp
10+
//使用用户名、密码验证
11+
SqlHelper(string dataSource, string dataBase, string user, string pwd, int timeout = 5)
12+
13+
//或者使用Windows身份验证
14+
SqlHelper(string dataSource, string dataBase, int timeout = 5)
15+
16+
//传入连接字符串
17+
SqlHelper(string connectionString)
18+
```
19+
20+
- **dataSource:** 数据源
21+
- **dataBase:** 数据库
22+
- **user:** 用户名
23+
- **pwd:** 密码
24+
- **timeout:** 连接超时(秒),默认5秒
25+
26+
通常情况下,我们使用带有用户名和密码的验证方式连接数据库。只有当数据库开启了 Windows 身份验证,并且以该用户身份登录主机时,我们才能使用直接验证身份的连接方式。
27+
28+
## 执行一条SQL语句
29+
30+
执行 SQL 语句,是最基本的操作,SQLServerHelper 提供了 **ExecuteSqlCommand()** 函数来实现:
31+
32+
```csharp
33+
int ExecuteSqlCommand(string sqlCommand, bool closeConnection = true)
34+
```
35+
36+
- **sqlCommand:** 要执行的 SQL 语句
37+
- **closeConnection:** 是否关闭连接,默认关闭
38+
- **returns:** 执行 SQL 语句受影响的行数
39+
40+
**ExecuteSqlCommand()** 函数实际是对 `SqlCommand.ExecuteNonQuery()` 函数的包装。当需要批量地执行 SQL 语句时,可以将 **closeConnection** 参数设置为 false 不关闭连接,待所有语句执行完毕后再通过 **CloseConnection()** 函数关闭连接,避免了每次打开、关闭连接的时间消耗。
41+
42+
## 获取数据表
43+
44+
从数据库中获取某张数据表也是常用的操作,SQLServerHelper 提供了 **GetTable()** 函数来实现:
45+
46+
```csharp
47+
//通过sql语句获取数据表
48+
DataTable GetTable(string selectSqlCommand)
49+
```
50+
- **selectSqlCommand:** 获取表的select语句
51+
52+
```csharp
53+
//通过表名获取数据表
54+
DataTable GetTable(string tableName, int rows)
55+
```
56+
57+
58+
- **tableName:** 获取数据表的名称
59+
- **rows:** 查询的数据行数
60+
61+
可以直接通过 Select 语句来获取数据表,也可以直接通过表名和指定返回条数的方式获取数据表。函数实际上是对 `SqlDataAdapter.Fill()` 函数的包装。
62+
63+
## 按流的方式单向读取数据
64+
65+
当需要从数据库中读取大量数据时,直接返回整张表的方式就不合适了,这时就应该使用数据流的方式来读取了,SQLServerHelper 提供了 **GetDataStream()** 函数来实现:
66+
67+
```csharp
68+
SqlDataReader GetDataStream(string selectSqlCommand)
69+
```
70+
- **selectSqlCommand:** 获取数据的select语句
71+
- **returns:** SqlDataReader对象
72+
73+
获取到 SqlDataReader 对象后,就可以通过循环的方式来一条一条的读取数据了:
74+
75+
```csharp
76+
SqlDataReader sqlDataReader = sqlHelper.GetDataStream("select * from student where sex=N'男'");
77+
while (sqlDataReader.Read())
78+
{
79+
//获取指定字段的值
80+
string id = sqlDataReader["sid"].ToString();
81+
string name = sqlDataReader["name"].ToString();
82+
string sex = sqlDataReader["sex"].ToString();
83+
string score = sqlDataReader["score"].ToString();
84+
Console.WriteLine(id + "\t" + name + "\t" + sex + "\t" + score);
85+
}
86+
sqlHelper.CloseConnection();
87+
```
88+
89+
注意:在读取完所有数据后,需要使用 **CloseConnection()** 函数手动关闭连接。
90+
91+
## 添加数据到指定 DataSet 中
92+
93+
DataSet 相当于是本地的一个临时数据库,当需要频繁从同一张数据表读取数据,或者需要批量修改表中的数据时,就可以使用 **AddDataToDataSet()** 函数在内存中建立临时的本地数据库,提高数据的读取速度。
94+
95+
```csharp
96+
//添加数据到指定DataSet中(添加到一张表)
97+
void AddDataToDataSet(DataSet dataSet, string selectSqlCommands, string insertTableName)
98+
```
99+
- **dataSet:** 被填充的 DataSet
100+
- **selectSqlCommands:** 获取数据的select语句
101+
- **insertTableName:** 插入数据表的表名
102+
103+
```csharp
104+
//添加数据到指定DataSet中(添加到多张表)
105+
void AddDataToDataSet(DataSet dataSet, List<string> selectSqlCommands, List<string> insertTableNames)
106+
```
107+
- **dataSet:** 被填充的DataSet
108+
- **selectSqlCommands:** 获取数据的select语句列表
109+
- **insertTableNames:** 对应sql语句列表的插入表名列表
110+
111+
**AddDataToDataSet()** 函数不仅支持在本地添加一张表,也支持同时建立多张表。
112+
113+
## 提交对数据表进行的修改
114+
115+
当我们需要对一张表做大量的修改时,通过反复执行 Update 函数就不是一个好的选择了。更好的做法是,现在本地建立一张表的备份,然后直接在内存中对表中的数据进行修改,最后再向数据库批量提交修改,SQLServerHelper 提供了 **UpdateTable()** 函数来实现:
116+
117+
```csharp
118+
//提交对数据表进行的修改
119+
void UpdateTable(DataTable dataTable, string createTableSqlCommand)
120+
```
121+
- **dataTable:** 修改的数据表
122+
- **createTableSqlCommand:** 创建数据表的sql语句
123+
124+
```csharp
125+
//提交对数据表进行的修改(在DataSet中的数据表)
126+
void UpdateTable(DataSet dataset, string TableName, string createTableSqlCommand)
127+
```
128+
- **dataset:** 修改的数据表所在的DataSet
129+
- **TableName:** 创建被修改的数据表名
130+
- **createTableSqlCommand:** 创建数据表的sql语句
131+
132+
**UpdateTable()** 函数支持提交直接对数据表的修改,也支持提交对 DataSet 中的数据表的修改。
133+
134+
注意:**createTableSqlCommand** 参数是为了让函数知晓数据表的字段结构,因而必须包含完整的建表 SQL 语句,最好直接使用建表时的 SQL 语句以避免不必要的错误。
135+
136+
## 注意
137+
138+
### 与数据库连接的管理问题
139+
140+
绝大多函数都会自动管理与数据库连接的打开和关闭,不需要用户的干预。只有按流的方式单向读取数据的 **GetDataStream()** 函数,需要用户在读取完所有数据后调用 **CloseConnection()** 函数手动关闭连接。如果执行 SQL 语句 **ExecuteSqlCommand()** 函数以不关闭连接的方式调用,也需要用户手动关闭连接。
141+
142+
### 同时读写
143+
144+
由于每一个 SQLServerHelper 对象只维护一个与数据库的连接,所以当读取操作与写入操作同时发生时会发生错误(例如,在按流的方式 **GetDataStream()** 单向读取数据的过程中,又调用 **ExecuteSqlCommand()** 函数向数据库中写入数据),这时候必须建立多个 SQLServerHelper 对象。
145+
146+
### 调用示例
147+
148+
具体的调用方式可以参考 [测试代码](https://github.com/jsksxs360/Xus.SQLServerHelper/blob/master/test/Program.cs)

0 commit comments

Comments
 (0)