在开发流程中编写数据访问及操作的代码必不可少,为了不让相关代码在项目内过多的重复编写,所以就要编写一个通用的数据操作相关的类了。使用也很方便,调用使用就可以了。
使用这个工具类会大幅度减少编写数据访问相关的代码量。这里我就把编写流程分别写出来~
以下是工具类的相关代码:
连接数据库的字符串
1.引用配置文件信息(App.config)方式
工具类中代码:
public static string connstr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
配置文件(App.config)的代码:
提示:写在 configuration 块内。
<configuration>
<connectionStrings>
<add name="connStr" connectionString="server=.;database=student;uid=sa;pwd=123456" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
2.普通字符串方式
public static string connStr = "server=.;database=student;uid=sa;pwd=123456";
基础数据操作
1.数据增删改操作
/// <summary>
/// 数据增删改方法
/// </summary>
/// <param name="sql">T-SQL语句</param>
/// <param name="param">参数数组</param>
/// <returns>返回受影响行数</returns>
public static int ExecuteNonQuery(string sql, SqlParameter[] param)
{
//创建连接
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (param != null) //当我们传递的参数不为空,进行赋值
{
cmd.Parameters.AddRange(param);
}
try
{
conn.Open(); //打开连接
return cmd.ExecuteNonQuery(); //执行命令,返回受影响行数
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}
}
2.数据查询操作
/// <summary>
/// SqlDataAdapter 数据填充查询方法
/// </summary>
/// <param name="sql">T-SQL语句</param>
/// <param name="param">参数数组</param>
/// <returns>返回系统临时内存表</returns>
public static DataTable Query(string sql, SqlParameter[] param)
{
using (SqlDataAdapter sda = new SqlDataAdapter(sql, connstr))
{
if (param != null)
{
sda.SelectCommand.Parameters.AddRange(param);
}
DataTable dt = new DataTable(); //创建系统虚表
sda.Fill(dt); // 把查询出来的数据填充到系统虚表当中
return dt; //返回系统虚表
}
}
其他数据操作
1.查询数据总行数
/// <summary>
/// 查询数据个数
/// </summary>
/// <param name="sql">T-SQL语句</param>
/// <param name="param">参数数组</param>
/// <returns>数量</returns>
public static object ExecuteScalar(string sql, SqlParameter[] param)
{
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (param != null)
{
cmd.Parameters.AddRange(param);
}
try
{
conn.Open();
return cmd.ExecuteScalar();//执行之后得到我们查询的值
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}
}
2.读取Excel形成DataTable结果集
/// <summary>
/// 读取Excel形成DataTable结果集
/// </summary>
/// <param name="filePath">文件绝对路径</param>
/// <param name="strSql">查询页签sql</param>
/// <returns>DataTable结果集</returns>
public static DataTable ExcuteDataTableByExcel(string filePath,string strSql)
{
string connetionStr = "Provider=Microsoft.Ace.OleDb.12.0;" + "Data Source=" + filePath + ";" + "Extended Properties='Excel 12.0;HDR=Yes;IMEX=0';";
DataTable dtExcel = new DataTable();
OleDbConnection odbConn = new OleDbConnection(connetionStr);
OleDbDataAdapter odbAdapter = new OleDbDataAdapter(strSql, odbConn);
odbAdapter.Fill(dtExcel);
return dtExcel;
}
需要引用 System.Data.OleDb;
3.批量导入数据到数据库
/// <summary>
/// 批量导入数据到数据库
/// </summary>
/// <param name="dt">源数据</param>
/// <param name="conn">连接的数据库</param>
/// <param name="transaction">事务</param>
/// <param name="colums">导入的数据列</param>
public static void BulkCopyToDBFormExel(DataTable dt,SqlBulkCopyOptions option, string tableName)
{
//SqlBulkCopy blkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, transaction);//生成自增的列表
SqlConnection conn = null;
SqlTransaction transaction = null;
SqlBulkCopy blkCopy = null;
try
{
conn = new SqlConnection(connstr);
conn.Open();
transaction = conn.BeginTransaction();
blkCopy = new SqlBulkCopy(conn,option, transaction);
blkCopy.BatchSize = dt.Rows.Count;
blkCopy.DestinationTableName = tableName;
for (int i = 0; i < dt.Columns.Count; i++)
{
blkCopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
}
blkCopy.WriteToServer(dt);
transaction.Commit();
}
catch (Exception ex)
{
throw ex;
}
finally
{
blkCopy.Close();
transaction.Dispose();
conn.Dispose();
}
}
注意事项:
1.注意方法内引用的变量名是否与编写的一致。
2.注意编写的数据库连接字符串是否正确。