1. using System;
    2. using System.Data;
    3. using System.Text;
    4. using MySql.Data.MySqlClient;
    5. namespace Helper
    6. {
    7. public class MySqlHelper
    8. {
    9. /// <summary>
    10. /// 批量操作每批次记录数
    11. /// </summary>
    12. public static int BatchSize = 2000;
    13. /// <summary>
    14. /// 超时时间
    15. /// </summary>
    16. public static int CommandTimeOut = 600;
    17. /// <summary>
    18. ///初始化MySqlHelper实例
    19. /// </summary>
    20. /// <param name="connectionString">数据库连接字符串</param>
    21. public MySqlHelper()
    22. {
    23. }
    24. /// <summary>
    25. /// 数据库连接字符串
    26. /// </summary>
    27. public string ConnectionString { get; set; }
    28. #region 实例方法
    29. #region ExecuteNonQuery
    30. /// <summary>
    31. /// 执行SQL语句,返回影响的行数
    32. /// </summary>
    33. /// <param name="commandText">SQL语句</param>
    34. /// <param name="parms">查询参数</param>
    35. /// <returns>返回影响的行数</returns>
    36. public int ExecuteNonQuery(string commandText, params MySqlParameter[] parms)
    37. {
    38. return ExecuteNonQuery(ConnectionString, CommandType.Text, commandText, parms);
    39. }
    40. /// <summary>
    41. /// 执行SQL语句,返回影响的行数
    42. /// </summary>
    43. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    44. /// <param name="commandText">SQL语句或存储过程名称</param>
    45. /// <param name="parms">查询参数</param>
    46. /// <returns>返回影响的行数</returns>
    47. public int ExecuteNonQuery(CommandType commandType, string commandText, params MySqlParameter[] parms)
    48. {
    49. return ExecuteNonQuery(ConnectionString, commandType, commandText, parms);
    50. }
    51. #endregion ExecuteNonQuery
    52. #region ExecuteScalar
    53. /// <summary>
    54. /// 执行SQL语句,返回结果集中的第一行第一列
    55. /// </summary>
    56. /// <typeparam name="T">返回对象类型</typeparam>
    57. /// <param name="commandText">SQL语句</param>
    58. /// <param name="parms">查询参数</param>
    59. /// <returns>返回结果集中的第一行第一列</returns>
    60. public T ExecuteScalar<T>(string commandText, params MySqlParameter[] parms)
    61. {
    62. return ExecuteScalar<T>(ConnectionString, commandText, parms);
    63. }
    64. /// <summary>
    65. /// 执行SQL语句,返回结果集中的第一行第一列
    66. /// </summary>
    67. /// <param name="commandText">SQL语句</param>
    68. /// <param name="parms">查询参数</param>
    69. /// <returns>返回结果集中的第一行第一列</returns>
    70. public object ExecuteScalar(string commandText, params MySqlParameter[] parms)
    71. {
    72. return ExecuteScalar(ConnectionString, CommandType.Text, commandText, parms);
    73. }
    74. /// <summary>
    75. /// 执行SQL语句,返回结果集中的第一行第一列
    76. /// </summary>
    77. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    78. /// <param name="commandText">SQL语句或存储过程名称</param>
    79. /// <param name="parms">查询参数</param>
    80. /// <returns>返回结果集中的第一行第一列</returns>
    81. public object ExecuteScalar(CommandType commandType, string commandText, params MySqlParameter[] parms)
    82. {
    83. return ExecuteScalar(ConnectionString, commandType, commandText, parms);
    84. }
    85. #endregion ExecuteScalar
    86. #region ExecuteDataRow
    87. /// <summary>
    88. /// 执行SQL语句,返回结果集中的第一行
    89. /// </summary>
    90. /// <param name="commandText">SQL语句</param>
    91. /// <param name="parms">查询参数</param>
    92. /// <returns>返回结果集中的第一行</returns>
    93. public DataRow ExecuteDataRow(string commandText, params MySqlParameter[] parms)
    94. {
    95. return ExecuteDataRow(ConnectionString, CommandType.Text, commandText, parms);
    96. }
    97. /// <summary>
    98. /// 执行SQL语句,返回结果集中的第一行
    99. /// </summary>
    100. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    101. /// <param name="commandText">SQL语句或存储过程名称</param>
    102. /// <param name="parms">查询参数</param>
    103. /// <returns>返回结果集中的第一行</returns>
    104. public DataRow ExecuteDataRow(CommandType commandType, string commandText, params MySqlParameter[] parms)
    105. {
    106. return ExecuteDataRow(ConnectionString, commandType, commandText, parms);
    107. }
    108. #endregion ExecuteDataRow
    109. #region ExecuteDataTable
    110. /// <summary>
    111. /// 执行SQL语句,返回结果集中的第一个数据表
    112. /// </summary>
    113. /// <param name="commandText">SQL语句</param>
    114. /// <param name="parms">查询参数</param>
    115. /// <returns>返回结果集中的第一个数据表</returns>
    116. public DataTable ExecuteDataTable(string commandText, params MySqlParameter[] parms)
    117. {
    118. return ExecuteDataTable(ConnectionString, CommandType.Text, commandText, parms);
    119. }
    120. /// <summary>
    121. /// 执行SQL语句,返回结果集中的第一个数据表
    122. /// </summary>
    123. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    124. /// <param name="commandText">SQL语句或存储过程名称</param>
    125. /// <param name="parms">查询参数</param>
    126. /// <returns>返回结果集中的第一个数据表</returns>
    127. public DataTable ExecuteDataTable(CommandType commandType, string commandText, params MySqlParameter[] parms)
    128. {
    129. return ExecuteDataSet(ConnectionString, commandType, commandText, parms).Tables[0];
    130. }
    131. #endregion ExecuteDataTable
    132. #region ExecuteDataSet
    133. /// <summary>
    134. /// 执行SQL语句,返回结果集
    135. /// </summary>
    136. /// <param name="commandText">SQL语句</param>
    137. /// <param name="parms">查询参数</param>
    138. /// <returns>返回结果集</returns>
    139. public DataSet ExecuteDataSet(string commandText, params MySqlParameter[] parms)
    140. {
    141. return ExecuteDataSet(ConnectionString, CommandType.Text, commandText, parms);
    142. }
    143. /// <summary>
    144. /// 执行SQL语句,返回结果集
    145. /// </summary>
    146. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    147. /// <param name="commandText">SQL语句或存储过程名称</param>
    148. /// <param name="parms">查询参数</param>
    149. /// <returns>返回结果集</returns>
    150. public DataSet ExecuteDataSet(CommandType commandType, string commandText, params MySqlParameter[] parms)
    151. {
    152. return ExecuteDataSet(ConnectionString, commandType, commandText, parms);
    153. }
    154. #endregion ExecuteDataSet
    155. #region 批量操作
    156. /// <summary>
    157. /// 使用MySqlDataAdapter批量更新数据
    158. /// </summary>
    159. /// <param name="table">数据表</param>
    160. public void BatchUpdate(DataTable table)
    161. {
    162. BatchUpdate(ConnectionString, table);
    163. }
    164. /// <summary>
    165. ///大批量数据插入,返回成功插入行数
    166. /// </summary>
    167. /// <param name="table">数据表</param>
    168. /// <returns>返回成功插入行数</returns>
    169. //public int BulkInsert(DataTable table)
    170. //{
    171. // return BulkInsert(ConnectionString, table);
    172. //}
    173. #endregion 批量操作
    174. #endregion 实例方法
    175. #region 静态方法
    176. private static void PrepareCommand(MySqlCommand command, MySqlConnection connection,
    177. MySqlTransaction transaction, CommandType commandType, string commandText, MySqlParameter[] parms)
    178. {
    179. if (connection.State != ConnectionState.Open) connection.Open();
    180. command.Connection = connection;
    181. command.CommandTimeout = CommandTimeOut;
    182. // 设置命令文本(存储过程名或SQL语句)
    183. command.CommandText = commandText;
    184. // 分配事务
    185. if (transaction != null)
    186. {
    187. command.Transaction = transaction;
    188. }
    189. // 设置命令类型.
    190. command.CommandType = commandType;
    191. if (parms != null && parms.Length > 0)
    192. {
    193. //预处理MySqlParameter参数数组,将为NULL的参数赋值为DBNull.Value;
    194. foreach (MySqlParameter parameter in parms)
    195. {
    196. if ((parameter.Direction == ParameterDirection.InputOutput ||
    197. parameter.Direction == ParameterDirection.Input) && (parameter.Value == null))
    198. {
    199. parameter.Value = DBNull.Value;
    200. }
    201. }
    202. command.Parameters.AddRange(parms);
    203. }
    204. }
    205. #region ExecuteNonQuery
    206. /// <summary>
    207. /// 执行SQL语句,返回影响的行数
    208. /// </summary>
    209. /// <param name="connectionString">数据库连接字符串</param>
    210. /// <param name="commandText">SQL语句</param>
    211. /// <param name="parms">查询参数</param>
    212. /// <returns>返回影响的行数</returns>
    213. public static int ExecuteNonQuery(string connectionString, string commandText, params MySqlParameter[] parms)
    214. {
    215. using (MySqlConnection connection = new MySqlConnection(connectionString))
    216. {
    217. return ExecuteNonQuery(connection, CommandType.Text, commandText, parms);
    218. }
    219. }
    220. /// <summary>
    221. /// 执行SQL语句,返回影响的行数
    222. /// </summary>
    223. /// <param name="connectionString">数据库连接字符串</param>
    224. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    225. /// <param name="commandText">SQL语句或存储过程名称</param>
    226. /// <param name="parms">查询参数</param>
    227. /// <returns>返回影响的行数</returns>
    228. public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText,
    229. params MySqlParameter[] parms)
    230. {
    231. using (MySqlConnection connection = new MySqlConnection(connectionString))
    232. {
    233. return ExecuteNonQuery(connection, commandType, commandText, parms);
    234. }
    235. }
    236. /// <summary>
    237. /// 执行SQL语句,返回影响的行数
    238. /// </summary>
    239. /// <param name="connection">数据库连接</param>
    240. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    241. /// <param name="commandText">SQL语句或存储过程名称</param>
    242. /// <param name="parms">查询参数</param>
    243. /// <returns>返回影响的行数</returns>
    244. public static int ExecuteNonQuery(MySqlConnection connection, CommandType commandType, string commandText,
    245. params MySqlParameter[] parms)
    246. {
    247. return ExecuteNonQuery(connection, null, commandType, commandText, parms);
    248. }
    249. /// <summary>
    250. /// 执行SQL语句,返回影响的行数
    251. /// </summary>
    252. /// <param name="transaction">事务</param>
    253. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    254. /// <param name="commandText">SQL语句或存储过程名称</param>
    255. /// <param name="parms">查询参数</param>
    256. /// <returns>返回影响的行数</returns>
    257. public static int ExecuteNonQuery(MySqlTransaction transaction, CommandType commandType, string commandText,
    258. params MySqlParameter[] parms)
    259. {
    260. return ExecuteNonQuery(transaction.Connection, transaction, commandType, commandText, parms);
    261. }
    262. /// <summary>
    263. /// 执行SQL语句,返回影响的行数
    264. /// </summary>
    265. /// <param name="connection">数据库连接</param>
    266. /// <param name="transaction">事务</param>
    267. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    268. /// <param name="commandText">SQL语句或存储过程名称</param>
    269. /// <param name="parms">查询参数</param>
    270. /// <returns>返回影响的行数</returns>
    271. private static int ExecuteNonQuery(MySqlConnection connection, MySqlTransaction transaction,
    272. CommandType commandType, string commandText, params MySqlParameter[] parms)
    273. {
    274. MySqlCommand command = new MySqlCommand();
    275. PrepareCommand(command, connection, transaction, commandType, commandText, parms);
    276. int retval = command.ExecuteNonQuery();
    277. command.Parameters.Clear();
    278. return retval;
    279. }
    280. #endregion ExecuteNonQuery
    281. #region ExecuteScalar
    282. /// <summary>
    283. /// 执行SQL语句,返回结果集中的第一行第一列
    284. /// </summary>
    285. /// <typeparam name="T">返回对象类型</typeparam>
    286. /// <param name="connectionString">数据库连接字符串</param>
    287. /// <param name="commandText">SQL语句</param>
    288. /// <param name="parms">查询参数</param>
    289. /// <returns>返回结果集中的第一行第一列</returns>
    290. public static T ExecuteScalar<T>(string connectionString, string commandText, params MySqlParameter[] parms)
    291. {
    292. object result = ExecuteScalar(connectionString, commandText, parms);
    293. if (result != null)
    294. {
    295. return (T)Convert.ChangeType(result, typeof(T));
    296. ;
    297. }
    298. return default(T);
    299. }
    300. /// <summary>
    301. /// 执行SQL语句,返回结果集中的第一行第一列
    302. /// </summary>
    303. /// <param name="connectionString">数据库连接字符串</param>
    304. /// <param name="commandText">SQL语句</param>
    305. /// <param name="parms">查询参数</param>
    306. /// <returns>返回结果集中的第一行第一列</returns>
    307. public static object ExecuteScalar(string connectionString, string commandText,
    308. params MySqlParameter[] parms)
    309. {
    310. using (MySqlConnection connection = new MySqlConnection(connectionString))
    311. {
    312. return ExecuteScalar(connection, CommandType.Text, commandText, parms);
    313. }
    314. }
    315. /// <summary>
    316. /// 执行SQL语句,返回结果集中的第一行第一列
    317. /// </summary>
    318. /// <param name="connectionString">数据库连接字符串</param>
    319. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    320. /// <param name="commandText">SQL语句或存储过程名称</param>
    321. /// <param name="parms">查询参数</param>
    322. /// <returns>返回结果集中的第一行第一列</returns>
    323. public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText,
    324. params MySqlParameter[] parms)
    325. {
    326. using (MySqlConnection connection = new MySqlConnection(connectionString))
    327. {
    328. return ExecuteScalar(connection, commandType, commandText, parms);
    329. }
    330. }
    331. /// <summary>
    332. /// 执行SQL语句,返回结果集中的第一行第一列
    333. /// </summary>
    334. /// <param name="connection">数据库连接</param>
    335. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    336. /// <param name="commandText">SQL语句或存储过程名称</param>
    337. /// <param name="parms">查询参数</param>
    338. /// <returns>返回结果集中的第一行第一列</returns>
    339. public static object ExecuteScalar(MySqlConnection connection, CommandType commandType, string commandText,
    340. params MySqlParameter[] parms)
    341. {
    342. return ExecuteScalar(connection, null, commandType, commandText, parms);
    343. }
    344. /// <summary>
    345. /// 执行SQL语句,返回结果集中的第一行第一列
    346. /// </summary>
    347. /// <param name="transaction">事务</param>
    348. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    349. /// <param name="commandText">SQL语句或存储过程名称</param>
    350. /// <param name="parms">查询参数</param>
    351. /// <returns>返回结果集中的第一行第一列</returns>
    352. public static object ExecuteScalar(MySqlTransaction transaction, CommandType commandType, string commandText,
    353. params MySqlParameter[] parms)
    354. {
    355. return ExecuteScalar(transaction.Connection, transaction, commandType, commandText, parms);
    356. }
    357. /// <summary>
    358. /// 执行SQL语句,返回结果集中的第一行第一列
    359. /// </summary>
    360. /// <param name="connection">数据库连接</param>
    361. /// <param name="transaction">事务</param>
    362. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    363. /// <param name="commandText">SQL语句或存储过程名称</param>
    364. /// <param name="parms">查询参数</param>
    365. /// <returns>返回结果集中的第一行第一列</returns>
    366. private static object ExecuteScalar(MySqlConnection connection, MySqlTransaction transaction,
    367. CommandType commandType, string commandText, params MySqlParameter[] parms)
    368. {
    369. MySqlCommand command = new MySqlCommand();
    370. PrepareCommand(command, connection, transaction, commandType, commandText, parms);
    371. object retval = command.ExecuteScalar();
    372. command.Parameters.Clear();
    373. return retval;
    374. }
    375. #endregion ExecuteScalar
    376. #region ExecuteDataReader
    377. /// <summary>
    378. /// 执行SQL语句,返回只读数据集
    379. /// </summary>
    380. /// <param name="connection">数据库连接</param>
    381. /// <param name="commandText">SQL语句</param>
    382. /// <param name="parms">查询参数</param>
    383. /// <returns>返回只读数据集</returns>
    384. private static MySqlDataReader ExecuteDataReader(string connectionString, string commandText,
    385. params MySqlParameter[] parms)
    386. {
    387. MySqlConnection connection = new MySqlConnection(connectionString);
    388. return ExecuteDataReader(connection, null, CommandType.Text, commandText, parms);
    389. }
    390. /// <summary>
    391. /// 执行SQL语句,返回只读数据集
    392. /// </summary>
    393. /// <param name="connection">数据库连接</param>
    394. /// <param name="transaction">事务</param>
    395. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    396. /// <param name="commandText">SQL语句或存储过程名称</param>
    397. /// <param name="parms">查询参数</param>
    398. /// <returns>返回只读数据集</returns>
    399. private static MySqlDataReader ExecuteDataReader(MySqlConnection connection, MySqlTransaction transaction,
    400. CommandType commandType, string commandText, params MySqlParameter[] parms)
    401. {
    402. MySqlCommand command = new MySqlCommand();
    403. PrepareCommand(command, connection, transaction, commandType, commandText, parms);
    404. return command.ExecuteReader(CommandBehavior.CloseConnection);
    405. }
    406. #endregion
    407. #region ExecuteDataRow
    408. /// <summary>
    409. /// 执行SQL语句,返回结果集中的第一行
    410. /// </summary>
    411. /// <param name="connectionString">数据库连接字符串</param>
    412. /// <param name="commandText">SQL语句</param>
    413. /// <param name="parms">查询参数</param>
    414. /// <returns>,返回结果集中的第一行</returns>
    415. public static DataRow ExecuteDataRow(string connectionString, string commandText,
    416. params MySqlParameter[] parms)
    417. {
    418. DataTable dt = ExecuteDataTable(connectionString, CommandType.Text, commandText, parms);
    419. return dt.Rows.Count > 0 ? dt.Rows[0] : null;
    420. }
    421. /// <summary>
    422. /// 执行SQL语句,返回结果集中的第一行
    423. /// </summary>
    424. /// <param name="connectionString">数据库连接字符串</param>
    425. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    426. /// <param name="commandText">SQL语句或存储过程名称</param>
    427. /// <param name="parms">查询参数</param>
    428. /// <returns>,返回结果集中的第一行</returns>
    429. public static DataRow ExecuteDataRow(string connectionString, CommandType commandType, string commandText,
    430. params MySqlParameter[] parms)
    431. {
    432. DataTable dt = ExecuteDataTable(connectionString, commandType, commandText, parms);
    433. return dt.Rows.Count > 0 ? dt.Rows[0] : null;
    434. }
    435. /// <summary>
    436. /// 执行SQL语句,返回结果集中的第一行
    437. /// </summary>
    438. /// <param name="connection">数据库连接</param>
    439. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    440. /// <param name="commandText">SQL语句或存储过程名称</param>
    441. /// <param name="parms">查询参数</param>
    442. /// <returns>,返回结果集中的第一行</returns>
    443. public static DataRow ExecuteDataRow(MySqlConnection connection, CommandType commandType, string commandText,
    444. params MySqlParameter[] parms)
    445. {
    446. DataTable dt = ExecuteDataTable(connection, commandType, commandText, parms);
    447. return dt.Rows.Count > 0 ? dt.Rows[0] : null;
    448. }
    449. /// <summary>
    450. /// 执行SQL语句,返回结果集中的第一行
    451. /// </summary>
    452. /// <param name="transaction">事务</param>
    453. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    454. /// <param name="commandText">SQL语句或存储过程名称</param>
    455. /// <param name="parms">查询参数</param>
    456. /// <returns>,返回结果集中的第一行</returns>
    457. public static DataRow ExecuteDataRow(MySqlTransaction transaction, CommandType commandType,
    458. string commandText, params MySqlParameter[] parms)
    459. {
    460. DataTable dt = ExecuteDataTable(transaction, commandType, commandText, parms);
    461. return dt.Rows.Count > 0 ? dt.Rows[0] : null;
    462. }
    463. #endregion ExecuteDataRow
    464. #region ExecuteDataTable
    465. /// <summary>
    466. /// 执行SQL语句,返回结果集中的第一个数据表
    467. /// </summary>
    468. /// <param name="connectionString">数据库连接字符串</param>
    469. /// <param name="commandText">SQL语句</param>
    470. /// <param name="parms">查询参数</param>
    471. /// <returns>返回结果集中的第一个数据表</returns>
    472. public static DataTable ExecuteDataTable(string connectionString, string commandText,
    473. params MySqlParameter[] parms)
    474. {
    475. return ExecuteDataSet(connectionString, CommandType.Text, commandText, parms).Tables[0];
    476. }
    477. /// <summary>
    478. /// 执行SQL语句,返回结果集中的第一个数据表
    479. /// </summary>
    480. /// <param name="connectionString">数据库连接字符串</param>
    481. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    482. /// <param name="commandText">SQL语句或存储过程名称</param>
    483. /// <param name="parms">查询参数</param>
    484. /// <returns>返回结果集中的第一个数据表</returns>
    485. public static DataTable ExecuteDataTable(string connectionString, CommandType commandType,
    486. string commandText, params MySqlParameter[] parms)
    487. {
    488. return ExecuteDataSet(connectionString, commandType, commandText, parms).Tables[0];
    489. }
    490. /// <summary>
    491. /// 执行SQL语句,返回结果集中的第一个数据表
    492. /// </summary>
    493. /// <param name="connection">数据库连接</param>
    494. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    495. /// <param name="commandText">SQL语句或存储过程名称</param>
    496. /// <param name="parms">查询参数</param>
    497. /// <returns>返回结果集中的第一个数据表</returns>
    498. public static DataTable ExecuteDataTable(MySqlConnection connection, CommandType commandType,
    499. string commandText, params MySqlParameter[] parms)
    500. {
    501. return ExecuteDataSet(connection, commandType, commandText, parms).Tables[0];
    502. }
    503. /// <summary>
    504. /// 执行SQL语句,返回结果集中的第一个数据表
    505. /// </summary>
    506. /// <param name="transaction">事务</param>
    507. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    508. /// <param name="commandText">SQL语句或存储过程名称</param>
    509. /// <param name="parms">查询参数</param>
    510. /// <returns>返回结果集中的第一个数据表</returns>
    511. public static DataTable ExecuteDataTable(MySqlTransaction transaction, CommandType commandType,
    512. string commandText, params MySqlParameter[] parms)
    513. {
    514. return ExecuteDataSet(transaction, commandType, commandText, parms).Tables[0];
    515. }
    516. /// <summary>
    517. /// 执行SQL语句,返回结果集中的第一个数据表
    518. /// </summary>
    519. /// <param name="connectionString">数据库连接字符串</param>
    520. /// <param name="tableName">数据表名称</param>
    521. /// <returns>返回结果集中的第一个数据表</returns>
    522. public static DataTable ExecuteEmptyDataTable(string connectionString, string tableName)
    523. {
    524. return
    525. ExecuteDataSet(connectionString, CommandType.Text,
    526. string.Format("select * from {0} where 1=-1", tableName)).Tables[0];
    527. }
    528. #endregion ExecuteDataTable
    529. #region ExecuteDataSet
    530. /// <summary>
    531. /// 执行SQL语句,返回结果集
    532. /// </summary>
    533. /// <param name="connectionString">数据库连接字符串</param>
    534. /// <param name="commandText">SQL语句</param>
    535. /// <param name="parms">查询参数</param>
    536. /// <returns>返回结果集</returns>
    537. public static DataSet ExecuteDataSet(string connectionString, string commandText,
    538. params MySqlParameter[] parms)
    539. {
    540. return ExecuteDataSet(connectionString, CommandType.Text, commandText, parms);
    541. }
    542. /// <summary>
    543. /// 执行SQL语句,返回结果集
    544. /// </summary>
    545. /// <param name="connectionString">数据库连接字符串</param>
    546. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    547. /// <param name="commandText">SQL语句或存储过程名称</param>
    548. /// <param name="parms">查询参数</param>
    549. /// <returns>返回结果集</returns>
    550. public static DataSet ExecuteDataSet(string connectionString, CommandType commandType, string commandText,
    551. params MySqlParameter[] parms)
    552. {
    553. using (MySqlConnection connection = new MySqlConnection(connectionString))
    554. {
    555. return ExecuteDataSet(connection, commandType, commandText, parms);
    556. }
    557. }
    558. /// <summary>
    559. /// 执行SQL语句,返回结果集
    560. /// </summary>
    561. /// <param name="connection">数据库连接</param>
    562. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    563. /// <param name="commandText">SQL语句或存储过程名称</param>
    564. /// <param name="parms">查询参数</param>
    565. /// <returns>返回结果集</returns>
    566. public static DataSet ExecuteDataSet(MySqlConnection connection, CommandType commandType, string commandText,
    567. params MySqlParameter[] parms)
    568. {
    569. return ExecuteDataSet(connection, null, commandType, commandText, parms);
    570. }
    571. /// <summary>
    572. /// 执行SQL语句,返回结果集
    573. /// </summary>
    574. /// <param name="transaction">事务</param>
    575. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    576. /// <param name="commandText">SQL语句或存储过程名称</param>
    577. /// <param name="parms">查询参数</param>
    578. /// <returns>返回结果集</returns>
    579. public static DataSet ExecuteDataSet(MySqlTransaction transaction, CommandType commandType,
    580. string commandText, params MySqlParameter[] parms)
    581. {
    582. return ExecuteDataSet(transaction.Connection, transaction, commandType, commandText, parms);
    583. }
    584. /// <summary>
    585. /// 执行SQL语句,返回结果集
    586. /// </summary>
    587. /// <param name="connection">数据库连接</param>
    588. /// <param name="transaction">事务</param>
    589. /// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
    590. /// <param name="commandText">SQL语句或存储过程名称</param>
    591. /// <param name="parms">查询参数</param>
    592. /// <returns>返回结果集</returns>
    593. private static DataSet ExecuteDataSet(MySqlConnection connection, MySqlTransaction transaction,
    594. CommandType commandType, string commandText, params MySqlParameter[] parms)
    595. {
    596. MySqlCommand command = new MySqlCommand();
    597. PrepareCommand(command, connection, transaction, commandType, commandText, parms);
    598. MySqlDataAdapter adapter = new MySqlDataAdapter(command);
    599. DataSet ds = new DataSet();
    600. adapter.Fill(ds);
    601. if (commandText.IndexOf("@") > 0)
    602. {
    603. commandText = commandText.ToLower();
    604. int index = commandText.IndexOf("where ");
    605. if (index < 0)
    606. {
    607. index = commandText.IndexOf("\nwhere");
    608. }
    609. if (index > 0)
    610. {
    611. ds.ExtendedProperties.Add("SQL", commandText.Substring(0, index - 1));
    612. //将获取的语句保存在表的一个附属数组里,方便更新时生成CommandBuilder
    613. }
    614. else
    615. {
    616. ds.ExtendedProperties.Add("SQL", commandText); //将获取的语句保存在表的一个附属数组里,方便更新时生成CommandBuilder
    617. }
    618. }
    619. else
    620. {
    621. ds.ExtendedProperties.Add("SQL", commandText); //将获取的语句保存在表的一个附属数组里,方便更新时生成CommandBuilder
    622. }
    623. foreach (DataTable dt in ds.Tables)
    624. {
    625. dt.ExtendedProperties.Add("SQL", ds.ExtendedProperties["SQL"]);
    626. }
    627. command.Parameters.Clear();
    628. return ds;
    629. }
    630. #endregion ExecuteDataSet
    631. #region 批量操作
    632. /// <summary>
    633. ///使用MySqlDataAdapter批量更新数据
    634. /// </summary>
    635. /// <param name="connectionString">数据库连接字符串</param>
    636. /// <param name="table">数据表</param>
    637. public static void BatchUpdate(string connectionString, DataTable table)
    638. {
    639. MySqlConnection connection = new MySqlConnection(connectionString);
    640. MySqlCommand command = connection.CreateCommand();
    641. command.CommandTimeout = CommandTimeOut;
    642. command.CommandType = CommandType.Text;
    643. MySqlDataAdapter adapter = new MySqlDataAdapter(command);
    644. MySqlCommandBuilder commandBulider = new MySqlCommandBuilder(adapter);
    645. commandBulider.ConflictOption = ConflictOption.OverwriteChanges;
    646. MySqlTransaction transaction = null;
    647. try
    648. {
    649. connection.Open();
    650. transaction = connection.BeginTransaction();
    651. //设置批量更新的每次处理条数
    652. adapter.UpdateBatchSize = BatchSize;
    653. //设置事物
    654. adapter.SelectCommand.Transaction = transaction;
    655. if (table.ExtendedProperties["SQL"] != null)
    656. {
    657. adapter.SelectCommand.CommandText = table.ExtendedProperties["SQL"].ToString();
    658. }
    659. adapter.Update(table);
    660. transaction.Commit(); /////提交事务
    661. }
    662. catch (MySqlException ex)
    663. {
    664. if (transaction != null) transaction.Rollback();
    665. throw ex;
    666. }
    667. finally
    668. {
    669. connection.Close();
    670. connection.Dispose();
    671. }
    672. }
    673. ///// <summary>
    674. /////大批量数据插入,返回成功插入行数
    675. ///// </summary>
    676. ///// <param name="connectionString">数据库连接字符串</param>
    677. ///// <param name="table">数据表</param>
    678. ///// <returns>返回成功插入行数</returns>
    679. //public static int BulkInsert(string connectionString, DataTable table)
    680. //{
    681. // if (string.IsNullOrEmpty(table.TableName)) throw new Exception("请给DataTable的TableName属性附上表名称");
    682. // if (table.Rows.Count == 0) return 0;
    683. // int insertCount = 0;
    684. // string tmpPath = Path.GetTempFileName();
    685. // string csv = DataTableToCsv(table);
    686. // File.WriteAllText(tmpPath, csv);
    687. // using (MySqlConnection conn = new MySqlConnection(connectionString))
    688. // {
    689. // MySqlTransaction tran = null;
    690. // try
    691. // {
    692. // conn.Open();
    693. // tran = conn.BeginTransaction();
    694. // MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
    695. // {
    696. // FieldTerminator = ",",
    697. // FieldQuotationCharacter = '"',
    698. // EscapeCharacter = '"',
    699. // LineTerminator = "\r\n",
    700. // FileName = tmpPath,
    701. // NumberOfLinesToSkip = 0,
    702. // TableName = table.TableName,
    703. // };
    704. // bulk.Columns.AddRange(table.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).ToList());
    705. // insertCount = bulk.Load();
    706. // tran.Commit();
    707. // }
    708. // catch (MySqlException ex)
    709. // {
    710. // if (tran != null) tran.Rollback();
    711. // throw ex;
    712. // }
    713. // }
    714. // File.Delete(tmpPath);
    715. // return insertCount;
    716. //}
    717. /// <summary>
    718. ///将DataTable转换为标准的CSV
    719. /// </summary>
    720. /// <param name="table">数据表</param>
    721. /// <returns>返回标准的CSV</returns>
    722. private static string DataTableToCsv(DataTable table)
    723. {
    724. //以半角逗号(即,)作分隔符,列为空也要表达其存在。
    725. //列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。
    726. //列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。
    727. StringBuilder sb = new StringBuilder();
    728. DataColumn colum;
    729. foreach (DataRow row in table.Rows)
    730. {
    731. for (int i = 0; i < table.Columns.Count; i++)
    732. {
    733. colum = table.Columns[i];
    734. if (i != 0) sb.Append(",");
    735. if (colum.DataType == typeof(string) && row[colum].ToString().Contains(","))
    736. {
    737. sb.Append("\"" + row[colum].ToString().Replace("\"", "\"\"") + "\"");
    738. }
    739. else sb.Append(row[colum].ToString());
    740. }
    741. sb.AppendLine();
    742. }
    743. return sb.ToString();
    744. }
    745. #endregion 批量操作
    746. #endregion 静态方法
    747. #region
    748. /// <summary>
    749. /// 根据表名插入数据
    750. /// </summary>
    751. /// <param name="table"></param
    752. /// <param name="names"></param>
    753. /// <param name="values"></param>
    754. /// <returns></returns>
    755. public static int InsertDataByName(string table, string names, string values, string connection)
    756. {
    757. int result = 0;
    758. if (values != "")
    759. {
    760. string sql = string.Format("INSERT INTO {0} {1} Values {2};", table, names, values);
    761. result = ExecuteNonQuery(connection, sql);
    762. }
    763. return result;
    764. }
    765. /// <summary>
    766. /// 根据表名修改制定列的数据
    767. /// </summary>
    768. /// <param name="table">表名</param
    769. /// <param name="namesValues">列和修改值</param>
    770. /// <param name="whereStr">条件</param>
    771. /// <returns></returns>
    772. public static int UpdateDataByName(string table, string namesValues, string whereStr, string connection)
    773. {
    774. int result = 0;
    775. if (!string.IsNullOrEmpty(namesValues))
    776. {
    777. string sql = string.Format("Update {0} set {1} {2};", table, namesValues, whereStr);
    778. result = ExecuteNonQuery(connection, sql);
    779. }
    780. return result;
    781. }
    782. /// <summary>
    783. /// 获取数据
    784. /// </summary>
    785. /// <param name="query"></param>
    786. /// <param name="connection"></param>
    787. /// <returns></returns>
    788. public static DataTable GetData(string query, string connection)
    789. {
    790. try
    791. {
    792. DataTable data = new DataTable();
    793. MySqlConnection sqlConnection = new MySqlConnection(connection);
    794. sqlConnection.Open();
    795. MySqlDataAdapter sqlDataAdpater = new MySqlDataAdapter(query, sqlConnection);
    796. sqlDataAdpater.Fill(data);
    797. sqlConnection.Close();
    798. sqlDataAdpater.Dispose();
    799. return data;
    800. }
    801. catch (Exception ex)
    802. {
    803. return new DataTable();
    804. }
    805. }
    806. /// <summary>
    807. /// 根据表名删除数据
    808. /// </summary>
    809. /// <param name="table"></param>
    810. /// <param name="names"></param>
    811. /// <param name="values"></param>
    812. /// <returns></returns>
    813. public static int ClearDataByName(string table, string connection)
    814. {
    815. try
    816. {
    817. string sql = string.Format("Truncate {0};", table);
    818. int dt = ExecuteNonQuery(connection, sql);
    819. return dt;
    820. }
    821. catch (Exception ex)
    822. {
    823. return 0;
    824. }
    825. }
    826. /// <summary>
    827. /// 根据表名删除数据
    828. /// </summary>
    829. /// <param name="table"></param>
    830. /// <param name="names"></param>
    831. /// <param name="values"></param>
    832. /// <returns></returns>
    833. public static int ClearDataByTime(string table, int second, string connection)
    834. {
    835. try
    836. {
    837. string sql = string.Format("delete from {0} where time<DATE_ADD(NOW(),INTERVAL {1} Second);", table, second);
    838. int dt = ExecuteNonQuery(connection, sql);
    839. return dt;
    840. }
    841. catch (Exception ex)
    842. {
    843. return 0;
    844. }
    845. }
    846. /// <summary>
    847. /// 根据Sql语句进行修改
    848. /// </summary>
    849. /// <param name="table"></param>
    850. /// <param name="names"></param>
    851. /// <param name="values"></param>
    852. /// <returns></returns>
    853. public static int UpdateData(string sql, string connection)
    854. {
    855. try
    856. {
    857. int dt = ExecuteNonQuery(connection, sql);
    858. return dt;
    859. }
    860. catch (Exception ex)
    861. {
    862. return 0;
    863. }
    864. }
    865. #endregion
    866. }
    867. }