C# Oracle数据库操作类
1 using System;
2 using System.Data;
3 using System.Collections.Generic;
4 using System.Configuration;
5 using System.Data.OracleClient;
6 using System.Text;
7 using System.IO;
8
9 ///
10 /// Oracle数据库操作类
11 ///
12 public static class OracleHelper
13 {
14 ///
15 /// 执行数据库非查询操作,返回受影响的行数
16 ///
17 /// 数据库连接字符串
18 /// 命令的类型
19 /// Oracle存储过程名称或PL/SQL命令
20 /// 命令参数集合
21 /// 当前查询操作影响的数据行数
22 public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
23 {
24 OracleCommand cmd = new OracleCommand();
25 using (OracleConnection conn = new OracleConnection(connectionString))
26 {
27 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
28 int val = cmd.ExecuteNonQuery();
29 cmd.Parameters.Clear();
30 return val;
31 }
32 }
33
34 ///
35 /// 执行数据库事务非查询操作,返回受影响的行数
36 ///
37 /// 数据库事务对象
38 /// Command类型
39 /// Oracle存储过程名称或PL/SQL命令
40 /// 命令参数集合
41 /// 当前事务查询操作影响的数据行数
42 public static int ExecuteNonQuery(OracleTransaction trans, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
43 {
44 OracleCommand cmd = new OracleCommand();
45 PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
46 int val = cmd.ExecuteNonQuery();
47 cmd.Parameters.Clear();
48 return val;
49 }
50
51 ///
52 /// 执行数据库非查询操作,返回受影响的行数
53 ///
54 /// Oracle数据库连接对象
55 /// Command类型
56 /// Oracle存储过程名称或PL/SQL命令
57 /// 命令参数集合
58 /// 当前查询操作影响的数据行数
59 public static int ExecuteNonQuery(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
60 {
61 if (connection == null)
62 throw new ArgumentNullException("当前数据库连接不存在");
63 OracleCommand cmd = new OracleCommand();
64 PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);
65 int val = cmd.ExecuteNonQuery();
66 cmd.Parameters.Clear();
67 return val;
68 }
69
70 ///
71 /// 执行数据库查询操作,返回OracleDataReader类型的内存结果集
72 ///
73 /// 数据库连接字符串
74 /// 命令的类型
75 /// Oracle存储过程名称或PL/SQL命令
76 /// 命令参数集合
77 /// 当前查询操作返回的OracleDataReader类型的内存结果集
78 public static OracleDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
79 {
80 OracleCommand cmd = new OracleCommand();
81 OracleConnection conn = new OracleConnection(connectionString);
82 try
83 {
84 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
85 OracleDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
86 cmd.Parameters.Clear();
87 return reader;
88 }
89 catch
90 {
91 cmd.Dispose();
92 conn.Close();
93 throw;
94 }
95 }
96
97 ///
98 /// 执行数据库查询操作,返回DataSet类型的结果集
99 ///
100 /// 数据库连接字符串
101 /// 命令的类型
102 /// Oracle存储过程名称或PL/SQL命令
103 /// 命令参数集合
104 /// 当前查询操作返回的DataSet类型的结果集
105 public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
106 {
107 OracleCommand cmd = new OracleCommand();
108 OracleConnection conn = new OracleConnection(connectionString);
109 DataSet ds = null;
110 try
111 {
112 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
113 OracleDataAdapter adapter = new OracleDataAdapter();
114 adapter.SelectCommand = cmd;
115 ds = new DataSet();
116 adapter.Fill(ds);
117 cmd.Parameters.Clear();
118 }
119 catch
120 {
121 throw;
122 }
123 finally
124 {
125 cmd.Dispose();
126 conn.Close();
127 conn.Dispose();
128 }
129
130 return ds;
131 }
132
133 ///
134 /// 执行数据库查询操作,返回DataTable类型的结果集
135 ///
136 /// 数据库连接字符串
137 /// 命令的类型
138 /// Oracle存储过程名称或PL/SQL命令
139 /// 命令参数集合
140 /// 当前查询操作返回的DataTable类型的结果集
141 public static DataTable ExecuteDataTable(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
142 {
143 OracleCommand cmd = new OracleCommand();
144 OracleConnection conn = new OracleConnection(connectionString);
145 DataTable dt = null;
146
147 try
148 {
149 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
150 OracleDataAdapter adapter = new OracleDataAdapter();
151 adapter.SelectCommand = cmd;
152 dt = new DataTable();
153 adapter.Fill(dt);
154 cmd.Parameters.Clear();
155 }
156 catch
157 {
158 throw;
159 }
160 finally
161 {
162 cmd.Dispose();
163 conn.Close();
164 conn.Dispose();
165 }
166
167 return dt;
168 }
169
170 ///
171 /// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值
172 ///
173 /// 数据库连接字符串
174 /// 命令的类型
175 /// Oracle存储过程名称或PL/SQL命令
176 /// 命令参数集合
177 /// 当前查询操作返回的结果集中位于第一行第一列的Object类型的值
178 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
179 {
180 OracleCommand cmd = new OracleCommand();
181 OracleConnection conn = new OracleConnection(connectionString);
182 object result = null;
183 try
184 {
185 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
186 result = cmd.ExecuteScalar();
187 cmd.Parameters.Clear();
188 }
189 catch
190 {
191 throw;
192 }
193 finally
194 {
195 cmd.Dispose();
196 conn.Close();
197 conn.Dispose();
198 }
199
200 return result;
201 }
202
203 ///
204 /// 执行数据库事务查询操作,返回结果集中位于第一行第一列的Object类型的值
205 ///
206 /// 一个已存在的数据库事务对象
207 /// 命令类型
208 /// Oracle存储过程名称或PL/SQL命令
209 /// 命令参数集合
210 /// 当前事务查询操作返回的结果集中位于第一行第一列的Object类型的值
211 public static object ExecuteScalar(OracleTransaction trans, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
212 {
213 if (trans == null)
214 throw new ArgumentNullException("当前数据库事务不存在");
215 OracleConnection conn = trans.Connection;
216 if (conn == null)
217 throw new ArgumentException("当前事务所在的数据库连接不存在");
218
219 OracleCommand cmd = new OracleCommand();
220 object result = null;
221
222 try
223 {
224 PrepareCommand(cmd, conn, trans, cmdType, cmdText, cmdParms);
225 result = cmd.ExecuteScalar();
226 cmd.Parameters.Clear();
227 }
228 catch
229 {
230 throw;
231 }
232 finally
233 {
234 trans.Dispose();
235 cmd.Dispose();
236 conn.Close();
237 conn.Dispose();
238 }
239
240 return result;
241 }
242
243 ///
244 /// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值
245 ///
246 /// 数据库连接对象
247 /// Command类型
248 /// Oracle存储过程名称或PL/SQL命令
249 /// 命令参数集合
250 /// 当前查询操作返回的结果集中位于第一行第一列的Object类型的值
251 public static object ExecuteScalar(OracleConnection conn, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
252 {
253 if (conn == null) throw new ArgumentException("当前数据库连接不存在");
254 OracleCommand cmd = new OracleCommand();
255 object result = null;
256
257 try
258 {
259 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
260 result = cmd.ExecuteScalar();
261 cmd.Parameters.Clear();
262 }
263 catch
264 {
265 throw;
266 }
267 finally
268 {
269 cmd.Dispose();
270 conn.Close();
271 conn.Dispose();
272 }
273
274 return result;
275 }
276
277 ///
278 /// 执行数据库命令前的准备工作
279 ///
280 /// Command对象
281 /// 数据库连接对象
282 /// 事务对象
283 /// Command类型
284 /// Oracle存储过程名称或PL/SQL命令
285 /// 命令参数集合
286 private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, CommandType cmdType, string cmdText, OracleParameter[] cmdParms)
287 {
288 if (conn.State != ConnectionState.Open)
289 conn.Open();
290
291 cmd.Connection = conn;
292 cmd.CommandText = cmdText;
293
294 if (trans != null)
295 cmd.Transaction = trans;
296
297 cmd.CommandType = cmdType;
298
299 if (cmdParms != null)
300 {
301 foreach (OracleParameter parm in cmdParms)
302 cmd.Parameters.Add(parm);
303 }
304 }
305
306 ///
307 /// 将.NET日期时间类型转化为Oracle兼容的日期时间格式字符串
308 ///
309 /// .NET日期时间类型对象
310 /// Oracle兼容的日期时间格式字符串(如该字符串:TO_DATE('2007-12-1','YYYY-MM-DD'))
311 public static string GetOracleDateFormat(DateTime date)
312 {
313 return "TO_DATE('" + date.ToString("yyyy-M-dd") + "','YYYY-MM-DD')";
314 }
315
316 ///
317 /// 将.NET日期时间类型转化为Oracle兼容的日期格式字符串
318 ///
319 /// .NET日期时间类型对象
320 /// Oracle日期时间类型格式化限定符
321 /// Oracle兼容的日期时间格式字符串(如该字符串:TO_DATE('2007-12-1','YYYY-MM-DD'))
322 public static string GetOracleDateFormat(DateTime date, string format)
323 {
324 if (format == null || format.Trim() == "") format = "YYYY-MM-DD";
325 return "TO_DATE('" + date.ToString("yyyy-M-dd") + "','" + format + "')";
326 }
327
328 ///
329 /// 将指定的关键字处理为模糊查询时的合法参数值
330 ///
331 /// 待处理的查询关键字
332 /// 过滤后的查询关键字
333 public static string HandleLikeKey(string source)
334 {
335 if (source == null || source.Trim() == "") return null;
336
337 source = source.Replace("[", "[]]");
338 source = source.Replace("_", "[_]");
339 source = source.Replace("%", "[%]");
340
341 return ("%" + source + "%");
342 }
343
344 }