数据库操作类

现在做项目几乎都得用到数据库吧!我用的是Sql Server 2008,具体也没有怎么研究过相关的数据库,不过,平常用到的数据库操作很多,这样我就写了一个数据库的操作类,平常调用起来倒是挺方便的,拿出来给大家分享一下!

具体是怎么写的很容易,每个方法都有一些简单的注释!

View Code
class DataBaseHelper
{
private string serverName;
private string datebaseName;
private string userName;
private string password;

/// <summary>
/// 构造函数,传入一些连接数据库需要的参数
/// </summary>
/// <param name="serverName">数据库的网络地址</param>
/// <param name="datebaseName">数据库名称</param>
/// <param name="userName">数据库的用户名</param>
/// <param name="password">数据库的密码</param>
public DataBaseHelper(string serverName, string datebaseName, string userName, string password)
{
this.serverName = serverName;
this.datebaseName = datebaseName;
this.userName = userName;
this.password = password;
}

/// <summary>
/// 平常用到的数据库的连接信息放到这里,直接调用这个函数就可以了
/// </summary>
/// <returns>返回一个数据库连接</returns>
public static DataBaseHelper GetHelper()
{
return new DataBaseHelper("127.0.0.1", "databaseName", "username", "password");
}

/// <summary>
/// 得到一个数据库连接,在调用每个操作数据库函数时调用
/// </summary>
/// <param name="timeoutMins">连接超时时间,单位:分</param>
/// <returns>返回一个可用的连接</returns>
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));
}

/// <summary>
/// 执行数据库操作
/// </summary>
/// <param name="sqlStr">需要执行的数据库语句</param>
/// <returns>执行结果</returns>
public int ExecuteNonQuery(string sqlStr)
{
return ExecuteNonQuery(sqlStr, null);
}

/// <summary>
/// 执行数据库操作
/// </summary>
/// <param name="sqlStr">数据库操作语句</param>
/// <param name="list">传入的数据参数</param>
/// <returns>返回操作结果</returns>
public int ExecuteNonQuery(string sqlStr, List<SqlParameter> list)
{
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();
}
}

/// <summary>
/// 执行读取数据库操作
/// </summary>
/// <param name="sqlStr">数据库读取操作语句</param>
/// <returns>返回一个reader</returns>
public SqlDataReader ExecuteReader(string sqlStr)
{
return ExecuteReader(sqlStr, null);
}

/// <summary>
/// 数据库读取操作
/// </summary>
/// <param name="sqlStr">数据库读取操作语句</param>
/// <param name="parList">传入的操作语句参数</param>
/// <returns>读取之后的reader</returns>
public SqlDataReader ExecuteReader(string sqlStr, List<SqlParameter> parList)
{
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;
}

/// <summary>
/// 将datatable里面的数据加入到数据库中,每次操作数据1,2W为宜
/// </summary>
/// <param name="dataTable">需要添加到数据库的数据</param>
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();
}
}

/// <summary>
/// 查看数据库中表的数据量
/// </summary>
/// <param name="tableName">需要查看的数据表</param>
/// <returns>count(*)</returns>
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
/// <summary>
/// 测试类
/// </summary>
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还是在这个函数里面,如果在数据库里面制定了某一项有默认值,那么在这里面你认为添加这一项多余的话,可以省略。

其他的要说的没有什么了,就这样!

 

记在这里,分享给大家!



posted @ 2011-12-23 15:44  pmars  阅读(2620)  评论(0编辑  收藏  举报