现在做项目几乎都得用到数据库吧!我用的是Sql Server 2008,具体也没有怎么研究过相关的数据库,不过,平常用到的数据库操作很多,这样我就写了一个数据库的操作类,平常调用起来倒是挺方便的,拿出来给大家分享一下!
具体是怎么写的很容易,每个方法都有一些简单的注释!
View Code
class DataBaseHelper { private string serverName; private string datebaseName; private string userName; private string password; ////// 构造函数,传入一些连接数据库需要的参数 /// /// 数据库的网络地址 /// 数据库名称 /// 数据库的用户名 /// 数据库的密码 public DataBaseHelper(string serverName, string datebaseName, string userName, string password) { this.serverName = serverName; this.datebaseName = datebaseName; this.userName = userName; this.password = password; } ////// 平常用到的数据库的连接信息放到这里,直接调用这个函数就可以了 /// ///返回一个数据库连接 public static DataBaseHelper GetHelper() { return new DataBaseHelper("127.0.0.1", "databaseName", "username", "password"); } ////// 得到一个数据库连接,在调用每个操作数据库函数时调用 /// /// 连接超时时间,单位:分 ///返回一个可用的连接 private SqlConnection getConnection(int timeoutMins) { return new SqlConnection( string.Format("server={0}; database={1}; uid={2}; pwd={3}; Connection Timeout={4};" , this.serverName, this.datebaseName, this.userName, this.password, timeoutMins * 60)); } ////// 执行数据库操作 /// /// 需要执行的数据库语句 ///执行结果 public int ExecuteNonQuery(string sqlStr) { return ExecuteNonQuery(sqlStr, null); } ////// 执行数据库操作 /// /// 数据库操作语句 /// 传入的数据参数 ///返回操作结果 public int ExecuteNonQuery(string sqlStr, Listlist) { SqlConnection sqlConn = getConnection(1); try { sqlConn.Open(); SqlCommand sqlCom = new SqlCommand(sqlStr, sqlConn); sqlCom.CommandTimeout = 60 * 30; if (list != null) { foreach (SqlParameter s in list) { sqlCom.Parameters.AddWithValue(s.ParameterName, s.SqlValue); } } return sqlCom.ExecuteNonQuery(); } catch { return -1; } finally { sqlConn.Close(); } } /// /// 执行读取数据库操作 /// /// 数据库读取操作语句 ///返回一个reader public SqlDataReader ExecuteReader(string sqlStr) { return ExecuteReader(sqlStr, null); } ////// 数据库读取操作 /// /// 数据库读取操作语句 /// 传入的操作语句参数 ///读取之后的reader public SqlDataReader ExecuteReader(string sqlStr, ListparList) { SqlDataReader reader = null; SqlConnection sqlConn = getConnection(1); try { sqlConn.Open(); SqlCommand sqlCom = new SqlCommand(sqlStr, sqlConn); sqlCom.CommandTimeout = 30 * 60; if (parList != null) { foreach (SqlParameter s in parList) { sqlCom.Parameters.AddWithValue(s.ParameterName, s.SqlValue); } } reader = sqlCom.ExecuteReader(CommandBehavior.CloseConnection); } catch { sqlConn.Close(); } return reader; } /// /// 将datatable里面的数据加入到数据库中,每次操作数据1,2W为宜 /// /// 需要添加到数据库的数据 public void AddToDatabase(DataTable dataTable) { SqlConnection conn = getConnection(1); try { conn.Open(); SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(conn); sqlBulkCopy.DestinationTableName = dataTable.TableName; sqlBulkCopy.BulkCopyTimeout = 600; foreach (DataColumn item in dataTable.Columns) { sqlBulkCopy.ColumnMappings.Add(item.ColumnName, item.ColumnName); } sqlBulkCopy.WriteToServer(dataTable); sqlBulkCopy.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { conn.Close(); } } ////// 查看数据库中表的数据量 /// /// 需要查看的数据表 ///count(*) public int GetRowCount(string tableName) { SqlDataReader reader = ExecuteReader("select rows from sysindexes where id = object_id('" + tableName + "') and indid in (0,1)"); if (reader == null) return -1; reader.Read(); return (int)reader["rows"]; } }
之后需要在写道这里的是,怎么用到这个里面的AddToDatabase这个方法,很简单,这个类就可以用到了
View Code
////// 测试类 /// class Test { public int para1; public int para2; public int para3; public int para4; public static void AddToDB(Test[] data) { DataBaseHelper helper = DataBaseHelper.GetHelper(); DataTable dataTable = GetTableSchema(); for (int i = 0; i < data.Length; i++) { DataRow dataRow = dataTable.NewRow(); dataRow["para1"] = data[i].para1; dataRow["para2"] = data[i].para2; dataRow["para3"] = data[i].para3; dataRow["para4"] = data[i].para4; dataTable.Rows.Add(dataRow); } helper.AddToDatabase(dataTable); dataTable.Clear(); } private static DataTable GetTableSchema() { DataTable dt = new DataTable("Test"); dt.Columns.Add("para1", typeof(int)); dt.Columns.Add("para2", typeof(int)); dt.Columns.Add("para3", typeof(int)); dt.Columns.Add("para4", typeof(int)); return dt; } }
需要说一下经常遇到的问题:
1,GetTableSchema这个函数中用到的dt.Columns.Add("para1", typeof(int));这里的类型很容易搞明白,这里的名字很让人不爽,她严格的要求,必须和你要添加的数据库表的字段名完全一致(区分大小写),否则就等着程序报bug吧!
2,GetTableSchema还是在这个函数里面,如果在数据库里面制定了某一项有默认值,那么在这里面你认为添加这一项多余的话,可以省略。
其他的要说的没有什么了,就这样!
记在这里,分享给大家!