using System;
using System.Data;
using System.Collections;
using
System.Data.SqlClient;
using System.Data.OleDb;
using
DBUtility.ConfigurationHelp;//个人设定的配置类
namespace DBUtility.SqlHelp
{
/// <summary>
/// 数据库操作基类
/// 实现对Sql数据库的各种操作
///
</summary>
public abstract class DbHelperSQL
{
#region 变量声明
private static string connectionString = ConnectionStringAdmin.BaiHuoGu;//得到
连接数据库的字符串
private static SqlConnection
connectionAnyWhere;//创建SQL连接
private DataSet ds = null;
//创建数据集
#endregion
public DbHelperSQL()
{
}
#region
打开/关闭数据库连接
/// <summary>
/// 打开数据库连接
///
</summary>
private static void OpenConnection()
{
#region
try
{
connectionAnyWhere = new SqlConnection(connectionString);
if
(connectionAnyWhere.State != System.Data.ConnectionState.Open)
{
connectionAnyWhere.Open();
}
}
catch (System.Data.SqlClient.SqlException ex)
{
throw ex;
}
#endregion
}
/// <summary>
/// 关闭数据库连接
///
</summary>
public static void CloseConnection()
{
#region
try
{
if (connectionAnyWhere != null)
{
if
(connectionAnyWhere.State != System.Data.ConnectionState.Closed)
{
connectionAnyWhere.Close();
connectionAnyWhere.Dispose();
}
}
}
catch (System.Data.SqlClient.SqlException
ex)
{
throw ex;
}
#endregion
}
#endregion
#region 关闭数据库和清除DateSet对象
/// <summary>
///
关闭数据库和清除DateSet对象
/// </summary>
public void
CloseConnectionAndDateSet()
{
if (ds != null) //
清除DataSet对象
{
ds.Clear();
}
if
(connectionAnyWhere != null)
{
connectionAnyWhere.Close(); // 关闭数据库连接
connectionAnyWhere.Dispose();
}
}
#endregion
#region 执行简单Sql语句
/// <summary>
///
执行Sql语句
/// </summary>
/// <param
name="strSql"></param>
public static int
ExecuteNonQuery(string strSql)
{
#region
int rowscount = 0;
SqlCommand cmd = null;
try
{
OpenConnection();
cmd = new
SqlCommand(strSql, connectionAnyWhere);
cmd.CommandTimeout =
60;
rowscount = cmd.ExecuteNonQuery();
}
catch (SqlException sqlex) { throw sqlex; }
finally
{
cmd.Connection.Close();
cmd.Dispose();
////CloseConnection();
}
return rowscount;
#endregion
}
/// <summary>
/// 执行查询语句,返回DataSet
///
</summary>
/// <param
name="SQLString">查询语句</param>
///
<returns>DataSet</returns>
public static DataSet
Query(string strSql)
{
OpenConnection();
SqlCommand cmd = new SqlCommand(strSql, connectionAnyWhere);
cmd.CommandTimeout = 60;
DataSet ds = null;
using
(SqlDataAdapter da = new SqlDataAdapter(cmd))
{
try
{
ds = new DataSet();
da.Fill(ds, "ds");
cmd.Parameters.Clear();
}
catch (System.Data.SqlClient.SqlException
ex)
{
throw new
Exception(ex.Message);
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
////CloseConnection();
}
return ds;
}
}
/// <summary>
/// 执行SQL语句,并返回第一行第一列结果
///
</summary>
/// <param
name="strSql">SQL语句</param>
///
<returns></returns>
public static string
ExecuteScalar(string strSql)
{
#region
string strReturn = "";
SqlCommand cmd = null;
OpenConnection();
try
{
cmd =
new SqlCommand(strSql, connectionAnyWhere);
cmd.CommandTimeout = 60;
strReturn =
cmd.ExecuteScalar().ToString();
}
catch
(SqlException ex)
{
throw ex;
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
////CloseConnection();
}
return strReturn;
#endregion
}
/// <summary>
/// 执行带一个存储过程参数的的SQL语句。
///
</summary>
/// <param
name="SQLString">SQL语句</param>
/// <param
name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
/// <returns>影响的记录数[返回整型值]</returns>
public static int
ExecuteNonQuery(string strSQL, string content)
{
OpenConnection();
SqlCommand cmd = new
SqlCommand(strSQL, connectionAnyWhere);
try
{
cmd.CommandTimeout = 60;
System.Data.SqlClient.SqlParameter myParameter = new
System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
myParameter.Value = content;
cmd.Parameters.Add(myParameter);
int rows = cmd.ExecuteNonQuery();
return
rows;
}
catch (SqlException ex)
{
throw ex;
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
}
/// <summary>
/// 执行带一个存储过程参数的的SQL语句。
///
</summary>
/// <param
name="SQLString">SQL语句</param>
/// <param
name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
/// <returns>影响的记录数[返回object]</returns>
public static
object ExecuteSqlGet(string strSQL, string content)
{
OpenConnection();
using (SqlCommand cmd = new SqlCommand(strSQL,
connectionAnyWhere))
{
try
{
cmd.CommandTimeout = 60;
System.Data.SqlClient.SqlParameter myParameter = new
System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
myParameter.Value = content;
cmd.Parameters.Add(myParameter);
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
catch (System.Data.SqlClient.SqlException E)
{
throw new Exception(E.Message);
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
}
}
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
///
</summary>
/// <param
name="SQLStringList">多条SQL语句</param>
public static void
ExecuteSqlTran(ArrayList SQLStringList)
{
OpenConnection();
SqlCommand cmd = new SqlCommand();
cmd.Connection = connectionAnyWhere;
cmd.CommandTimeout = 60;
SqlTransaction tx =
connectionAnyWhere.BeginTransaction();
cmd.Transaction = tx;
try
{
for (int n = 0; n <
SQLStringList.Count; n++)
{
string
strsql = SQLStringList[n].ToString();
if
(strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
}
tx.Commit();
}
catch (System.Data.SqlClient.SqlException E)
{
tx.Rollback();
throw new
Exception(E.Message);
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
}
/// <summary>
/// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
/// </summary>
/// <param
name="strSQL">SQL语句</param>
/// <param
name="fs">图像字节,数据库的字段类型为image的情况</param>
///
<returns>影响的记录数</returns>
public static int
ExecuteSqlInsertImg(string strSQL, byte[] fs)
{
OpenConnection();
using (SqlCommand cmd = new SqlCommand(strSQL,
connectionAnyWhere))
{
try
{
System.Data.SqlClient.SqlParameter myParameter = new
System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);
myParameter.Value = fs;
cmd.Parameters.Add(myParameter);
cmd.CommandTimeout =
60;
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch
(System.Data.SqlClient.SqlException E)
{
throw new Exception(E.Message);
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
}
}
#endregion
#region 执行带参数的SQL语句
/// <summary>
/// 执行SQL语句,返回影响的记录数
///
</summary>
/// <param
name="SQLString">SQL语句</param>
///
<returns>影响的记录数</returns>
public static int
ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
{
OpenConnection();
using (SqlCommand cmd = new
SqlCommand())
{
try
{
PrepareCommand(cmd, connectionAnyWhere, null, SQLString,
cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (System.Data.SqlClient.SqlException E)
{
throw new Exception(E.Message);
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
}
}
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
///
</summary>
/// <param
name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
public static void ExecuteSqlTran(Hashtable SQLStringList)
{
OpenConnection();
using (SqlTransaction trans =
connectionAnyWhere.BeginTransaction())
{
SqlCommand cmd = new SqlCommand();
try
{
//循环
foreach (DictionaryEntry myDE in
SQLStringList)
{
string
cmdText = myDE.Key.ToString();
SqlParameter[]
cmdParms = (SqlParameter[])myDE.Value;
PrepareCommand(cmd, connectionAnyWhere, trans, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
trans.Commit();
}
}
catch (SqlException ex)
{
trans.Rollback();
throw ex;
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
}
}
/// <summary>
///
执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param
name="SQLString">计算查询结果语句</param>
///
<returns>查询结果(object)</returns>
public static object
ExecuteScalar(string SQLString, params SqlParameter[] cmdParms)
{
OpenConnection();
using (SqlCommand cmd = new
SqlCommand())
{
try
{
PrepareCommand(cmd, connectionAnyWhere, null, SQLString,
cmdParms);
object obj = cmd.ExecuteScalar();
cmd.Parameters.Clear();
if ((Object.Equals(obj,
null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return
obj;
}
}
catch
(System.Data.SqlClient.SqlException e)
{
throw new Exception(e.Message);
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
}
}
/// <summary>
/// 执行查询语句,返回SqlDataReader
(使用该方法切记要手工关闭SqlDataReader和连接)
/// </summary>
///
<param name="strSQL">查询语句</param>
///
<returns>SqlDataReader</returns>
public static
SqlDataReader ExecuteReader(string SQLString, params SqlParameter[]
cmdParms)
{
OpenConnection();
SqlCommand cmd = new SqlCommand();
try
{
PrepareCommand(cmd, connectionAnyWhere, null, SQLString, cmdParms);
SqlDataReader myReader =
cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return myReader;
}
catch (SqlException ex)
{
throw ex;
}
//finally
//不能在此关闭,否则,返回的对象将无法使用
//{
// cmd.Dispose();
// connection.//CloseConnection();
//}
}
/// <summary>
/// 执行查询语句,返回DataSet
///
</summary>
/// <param
name="SQLString">查询语句</param>
///
<returns>DataSet</returns>
public static DataSet
Query(string SQLString, params SqlParameter[] cmdParms)
{
OpenConnection();
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connectionAnyWhere, null, SQLString, cmdParms);
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
DataSet ds = new DataSet();
try
{
sda.Fill(ds, "ds");
cmd.Parameters.Clear();
}
catch
(System.Data.SqlClient.SqlException ex)
{
throw new Exception(ex.Message);
}
finally
{
sda.SelectCommand.Connection.Close();
sda.SelectCommand.Dispose();
sda.SelectCommand.Connection
= null;
//CloseConnection();
}
return ds;
}
}
private static void PrepareCommand(SqlCommand cmd, SqlConnection
conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandTimeout = 60;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
if (cmdParms !=
null)
{
foreach (SqlParameter parameter in
cmdParms)
{
if ((parameter.Direction
== ParameterDirection.InputOutput || parameter.Direction ==
ParameterDirection.Input) &&
(parameter.Value
== null))
{
parameter.Value =
DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
}
#endregion
#region 返回 DataSet 或 DataTable
/// <summary>
/// 返回DataSet数据集
/// </summary>
/// <param
name="strSql">SQL语句</param>
public static DataSet
GetDataSet(string strSql)
{
#region
DataSet ds = new DataSet();
SqlDataAdapter sda = null;
try
{
OpenConnection();
sda = new SqlDataAdapter(strSql, connectionAnyWhere);
sda.Fill(ds);
}
catch (SqlException ex)
{
throw ex;
}
finally
{
sda.SelectCommand.Connection.Close();
sda.SelectCommand.Connection.Dispose();
//CloseConnection();
}
return ds;
#endregion
}
/// <summary>
/// 添加DataSet表 返回 DataSet
/// </summary>
/// <param
name="ds">DataSet对象</param>
/// <param
name="strSql">Sql语句</param>
/// <param
name="strTableName">表名</param>
public static DataSet
GetDataSet(DataSet ds, string strSql, string strTabName)
{
#region
SqlDataAdapter sda = null;
try
{
OpenConnection();
sda = new
SqlDataAdapter(strSql, connectionAnyWhere); ;
sda.Fill(ds,
strTabName);
}
catch (SqlException ex)
{
throw ex;
}
finally
{
sda.SelectCommand.Connection.Close();
sda.SelectCommand.Connection.Dispose();
//CloseConnection();
}
return ds;
#endregion
}
/// <summary>
/// 返回DataTable对象
///
</summary>
/// <param
name="strSql">SQL语句</param>
///
<returns></returns>
public static DataTable
GetDataTable(string strSql)
{
#region
DataTable dt = null;
SqlDataAdapter sda = null;
try
{
OpenConnection();
dt
= new DataTable();
sda = new SqlDataAdapter(strSql,
connectionAnyWhere);
sda.Fill(dt);
}
catch (SqlException ex)
{
throw ex;
}
finally
{
sda.SelectCommand.Connection.Close();
sda.SelectCommand.Connection.Dispose();
//CloseConnection();
}
return dt;
#endregion
}
/// <summary>
/// 返回 int 类型的值
用于统计一张表中符合条件的记录条数
/// </summary>
/// <param
name="strSql">SQL语句</param>
///
<returns></returns>
public static int
GetDataTableRecordCount(string strSql)
{
#region
int RecordCount = 0;
SqlDataAdapter sda = null;
try
{
OpenConnection();
sda = new SqlDataAdapter(strSql, connectionAnyWhere);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt != null)
{
RecordCount = dt.Rows.Count;
}
}
catch (SqlException ex)
{
throw ex;
}
finally
{
sda.SelectCommand.Connection.Close();
sda.SelectCommand.Connection.Dispose();
//CloseConnection();
}
return RecordCount;
#endregion
}
/// <summary>
/// 返回DataView数据视图
///
</summary>
/// <param
name="strSql">Sql语句</param>
public static DataView
GetDataView(string strSql)
{
#region
DataView dv = GetDataSet(strSql).Tables[0].DefaultView;
return
dv;
#endregion
}
/// <summary>
/// 返回SqlDataReader对象
使用完须关闭DataReader,关闭数据库连接
/// </summary>
/// <param
name="strSql">sql语句</param>
///
<returns></returns>
public static SqlDataReader
GetDataReader(string strSql)
{
#region
OpenConnection();
SqlCommand cmd = null;
SqlDataReader sdr = null;
try
{
cmd = new SqlCommand(strSql, connectionAnyWhere);
cmd.CommandTimeout = 60;
sdr =
cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch (SqlException ex)
{
throw ex;
}
//finally
//{
// cmd.Connection.Close();
// cmd.Dispose();
//}
return sdr;
#endregion
}
#endregion
#region 执行存储过程
/// <summary>
/// 执行存储过程
///
</summary>
/// <param
name="procName">存储过程的名称</param>
///
<returns>返回存储过程返回值</returns>
public static int
RunProcedure(string procName)
{
#region
int reVal = 0;
SqlCommand cmd = null;
try
{
cmd = CreateCommand(procName, null);
cmd.ExecuteNonQuery();
reVal =
(int)cmd.Parameters["ReturnValue"].Value;
}
catch
(SqlException ex)
{
throw ex;
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
return reVal;
#endregion
}
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程的名称</param>
///
<returns>返回存储过程返回值</returns>
public static DataSet
RunProcedure2(string procName)
{
OpenConnection();
DataSet dataSet = null;
SqlCommand cmd = null;
SqlDataAdapter sda = null;
try
{
cmd = new SqlCommand(procName, connectionAnyWhere);
cmd.CommandTimeout = 60;
cmd.CommandType =
CommandType.StoredProcedure;
sda = new
SqlDataAdapter(cmd);
dataSet = new DataSet();
sda.Fill(dataSet);
}
catch (SqlException
ex)
{
throw ex;
}
finally
{
sda.SelectCommand.Connection.Close();
sda.SelectCommand.Dispose();
//CloseConnection();
}
return dataSet;
}
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程名称</param>
///
<param name="prams">存储过程所需参数</param>
///
<returns>返回存储过程返回值</returns>
public static int
RunProcedure(string procName, SqlParameter[] prams)
{
#region
int reVal = 0;
SqlCommand cmd = null;
try
{
cmd = CreateCommand(procName,
prams);
cmd.ExecuteNonQuery();
reVal =
(int)cmd.Parameters["ReturnValue"].Value;
}
catch
(SqlException ex)
{
throw ex;
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
return reVal;
#endregion
}
//2009.6.4
/// <summary>
/// 执行存储过程 返回
ExecuteNonQuery 方法 影响的行数
/// </summary>
/// <param
name="procName">存储过程名称</param>
/// <param
name="prams">存储过程所需参数</param>
/// <returns>返回
ExecuteNonQuery 方法 影响的行数</returns>
public static int
RunProcedureReExecuteNonQueryVal(string procName, SqlParameter[] prams)
{
#region
int reVal = 0;
SqlCommand cmd = null;
try
{
cmd = CreateCommand(procName, prams);
reVal =
cmd.ExecuteNonQuery();
}
catch (SqlException
ex)
{
throw ex;
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
return reVal;
#endregion
}
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="storedProcName">存储过程名</param>
///
<param name="parameters">存储过程参数</param>
///
<returns>DataTable</returns>
public static DataTable
RunProcedureReDataTable(string storedProcName, SqlParameter[] parameters)
{
OpenConnection();
DataTable dt = new
DataTable();
SqlDataAdapter sqlDA = null;
try
{
sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = CreateCommand(storedProcName, parameters);
sqlDA.Fill(dt);
}
catch (SqlException ex)
{
throw ex;
}
finally
{
//sqlDA.SelectCommand.Connection.Close();
//sqlDA.SelectCommand.Connection.Dispose();
CloseConnection();
}
return dt;
}
//2009.6.4
//2009.3.2
/// <summary>
///
执行存储过程
/// </summary>
/// <param
name="procName">存储过程名称</param>
/// <param
name="prams">存储过程所需参数</param>
///
<returns>返回存储过程返回值</returns>
public static int
RunProcedure(string procName, SqlParameter[] prams, out int rowsAffected)
{
#region
SqlCommand cmd = null;
try
{
cmd = CreateCommand(procName,
prams);
cmd.ExecuteNonQuery();
rowsAffected = (int)cmd.Parameters["ReturnValue"].Value;
}
catch (SqlException ex)
{
throw ex;
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
return
rowsAffected;
#endregion
}
//2009.3.2
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="storedProcName">存储过程名</param>
///
<param name="parameters">存储过程参数</param>
/// <param
name="tableName">DataSet结果中的表名</param>
///
<returns>DataSet</returns>
public static DataSet
RunProcedure(string storedProcName, SqlParameter[] parameters, string
tableName)
{
OpenConnection();
DataSet
dataSet = new DataSet();
SqlDataAdapter sqlDA = null;
try
{
sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = CreateCommand(storedProcName, parameters);
sqlDA.Fill(dataSet, tableName);
}
catch (SqlException ex)
{
throw ex;
}
finally
{
sqlDA.SelectCommand.Connection.Close();
sqlDA.SelectCommand.Dispose();
//CloseConnection();
}
return dataSet;
}
/// <summary>
/// 执行存储过程返回DataReader对象
///
</summary>
/// <param
name="procName">Sql语句</param>
/// <param
name="dataReader">DataReader对象</param>
public static void
RunProcedure(string procName, SqlDataReader dataReader)
{
#region
SqlCommand cmd = null;
try
{
cmd = CreateCommand(procName, null);
dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch (SqlException ex)
{
throw ex;
}
//finally
//{
// cmd.Connection.Close();
//
cmd.Dispose();
// //CloseConnection();
//}
#endregion
}
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程的名称</param>
///
<param name="prams">存储过程所需参数</param>
/// <param
name="dataReader">DataReader对象</param>
public static void
RunProcedure(string procName, SqlParameter[] prams, SqlDataReader
dataReader)
{
#region
SqlCommand cmd =
null;
try
{
cmd =
CreateCommand(procName, prams);
dataReader =
cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch (SqlException ex)
{
throw ex;
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
//CloseConnection();
}
#endregion
}
/// <summary>
/// 创建一个SqlCommand对象以此来执行存储过程
///
</summary>
/// <param
name="procName">存储过程的名称</param>
/// <param
name="prams">存储过程所需参数</param>
///
<returns>返回SqlCommand对象</returns>
private static
SqlCommand CreateCommand(string procName, SqlParameter[] prams)
{
#region
// 确认打开连接
SqlCommand cmd = null;
try
{
OpenConnection();
cmd = new SqlCommand(procName, connectionAnyWhere);
cmd.CommandTimeout = 60;
cmd.CommandType =
CommandType.StoredProcedure;
// 依次把参数传入存储过程
if (prams != null)
{
foreach (SqlParameter parameter in prams)
cmd.Parameters.Add(parameter);
}
// 加入返回参数
cmd.Parameters.Add(
new
SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));
}
catch (SqlException sqlex)
{
throw sqlex;
}
return cmd;
#endregion
}
/// <summary>
/// 生成存储过程参数
///
</summary>
/// <param
name="ParamName">存储过程名称</param>
/// <param
name="DbType">参数类型</param>
/// <param
name="Size">参数大小</param>
/// <param
name="Direction">参数方向</param>
/// <param
name="Value">参数值</param>
/// <returns>新的 parameter
对象</returns>
public static SqlParameter MakeParam(string
ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object
Value)
{
#region
SqlParameter param =
null; ;
try
{
if (Size >
0)
param = new SqlParameter(ParamName, DbType, Size);
else
param = new SqlParameter(ParamName,
DbType);
param.Direction = Direction;
if
(!(Direction == ParameterDirection.Output && Value == null))
param.Value = Value;
}
catch
(SqlException ex)
{
throw ex;
}
return param;
#endregion
}
/// <summary>
/// 传入输入参数
/// </summary>
/// <param name="ParamName">存储过程名称</param>
///
<param name="DbType">参数类型</param></param>
///
<param name="Size">参数大小</param>
/// <param
name="Value">参数值</param>
/// <returns>新的 parameter
对象</returns>
public static SqlParameter MakeInParam(string
ParamName, SqlDbType DbType, int Size, object Value)
{
#region
return MakeParam(ParamName, DbType, Size,
ParameterDirection.Input, Value);
#endregion
}
/// <summary>
/// 传入返回值参数
///
</summary>
/// <param
name="ParamName">存储过程名称</param>
/// <param
name="DbType">参数类型</param>
/// <param
name="Size">参数大小</param>
/// <returns>新的 parameter
对象</returns>
public static SqlParameter MakeOutParam(string
ParamName, SqlDbType DbType, int Size)
{
#region
return MakeParam(ParamName, DbType, Size, ParameterDirection.Output,
null);
#endregion
}
#endregion
#region 读取Excel
/// <summary>
///
读取Excel
/// </summary>
/// <param
name="Path"></param>
/// <param
name="tableName"></param>
///
<returns></returns>
public static DataSet
ExcelToDS(string Path, string tableName)
{
string
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" +
"Extended Properties=Excel 8.0;"; //HDR=Yes;
DataSet ds =
null;
using (OleDbConnection conn = new
OleDbConnection(strConn))
{
OleDbDataAdapter
myCommand = null;
try
{
conn.Open();
string strExcel = "";
strExcel = "select * from [" + tableName + "$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds =
new DataSet();
myCommand.Fill(ds, "table1");
}
catch (SqlException ex)
{
throw ex;
}
finally
{
myCommand.Dispose();
conn.Close();
}
return ds;
}
}
/// <summary>
/// 将 Excel 文件转成 DataTable
/// </summary>
/// <param
name="strExcelFileName">Excel文件及其路径</param>
/// <param
name="strSheetName">工作表名,如:Sheet1</param>
/// <param
name="isTitleOrDataOfFirstRow">True 第一行是标题,False 第一行是数据</param>
/// <returns>DataTable</returns>
public static
DataTable ExcelToDataTable(string strExcelFileName, string strSheetName, bool
isTitleOrDataOfFirstRow)
{
string HDR = string.Empty;//如果第一行是数据而不是标题的话, 应该写: "HDR=No;"
if (isTitleOrDataOfFirstRow)
{
HDR =
"YES";//第一行是标题
}
else
{
HDR =
"NO";//第一行是数据
}
//源的定义
string strConn =
"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" +
"Extended Properties=‘Excel 8.0;HDR=" + HDR + ";IMEX=1‘;";
//Sql语句
//string strExcel = string.Format("select * from
[{0}$]", strSheetName); 这是一种方法
string strExcel = "select * from [" +
strSheetName + "$]";
//定义存放的数据表
DataSet ds = new
DataSet();
//连接数据源
using (OleDbConnection conn = new
OleDbConnection(strConn))
{
OleDbDataAdapter
adapter = null;
try
{
conn.Open();
//适配到数据源
adapter = new
OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds,
strSheetName);
}
catch
(System.Data.SqlClient.SqlException ex)
{
throw ex;
}
finally
{
adapter.SelectCommand.Connection.Close();
adapter.SelectCommand.Dispose();
}
}
return ds.Tables[strSheetName];
}
#endregion
#region 用于分页
/// <summary>
/// 分页方法 Pager2005
///
</summary>
/// <param name="tblName">表名
50</param>
/// <param name="fldName">字段名[可以是一个字段,也可以是 * ]
5000</param>
/// <param
name="PageSize">一共几页</param>
/// <param
name="PageIndex">当前页码</param>
/// <param
name="order">排序类型 5000</param>
/// <param
name="where">查询条件 5000</param>
/// <param
name="isCount">是否要返回统计记录总数</param>
/// <param
name="totalRecord">记录总数</param>
/// <returns>返回
DataSet </returns>
public static DataSet GetPagerList(int
pageSize, int pageIndex, string tablename, string fieldname, string where,
string order, bool isCount, out int totalRecord)
{
totalRecord = 0;
SqlParameter totalPageParm = new
SqlParameter("@TotalPage", SqlDbType.Int);
totalPageParm.Direction = ParameterDirection.Output;
SqlParameter
totalRecordParm = new SqlParameter("@totalRecord", SqlDbType.Int);
totalRecordParm.Direction = ParameterDirection.Output;
SqlParameter[] parameters = {
new
SqlParameter("@TableName", SqlDbType.VarChar, 50),
new
SqlParameter("@Fields", SqlDbType.VarChar, 5000),
new
SqlParameter("@OrderField", SqlDbType.VarChar, 5000),
new SqlParameter("@sqlWhere", SqlDbType.VarChar, 5000),
new SqlParameter("@pageSize", SqlDbType.Int),
new
SqlParameter("@pageIndex", SqlDbType.Int),
new
SqlParameter("@isCount", SqlDbType.Bit),
totalPageParm,totalRecordParm
};
parameters[0].Value = tablename; //表、视图名称
parameters[1].Value = fieldname;
//选择字段,全选用*
parameters[2].Value = order;
parameters[3].Value =
where;
parameters[4].Value = pageSize;
parameters[5].Value = pageIndex;
parameters[6].Value =
isCount;
DataSet ds = RunProcedure("Pager2005", parameters,
"PagerTable");
if (isCount)
{
int.TryParse(totalRecordParm.Value.ToString(), out totalRecord);
}
return ds;
}
#endregion
#region SQL 分页语句 及 cs 文件方法
/*
set ANSI_NULLS ON
set
QUOTED_IDENTIFIER ON
go
CREATE Procedure [dbo].[Pager2005]
@TableName
varchar(50), --表名
@Fields varchar(5000) = ‘*‘, --字段名(全部字段为*)
@OrderField varchar(5000), --排序字段(必须!支持多字段)
@sqlWhere
varchar(5000) = Null,--条件语句(不用加where)
@pageSize int,
--每页多少条记录
@pageIndex int = 1 , --指定当前为第几页
@isCount bit,
@TotalPage int output, --返回总页数
@totalRecord int output
as
begin
Begin Tran --开始事务
Declare @sql nvarchar(4000);
--Declare @totalRecord int output;
if(@isCount =1)
begin
--计算总记录数
if
(@SqlWhere=‘‘ or @sqlWhere=NULL)
set @sql = ‘select @totalRecord =
count(*) from ‘ + @TableName
else
set @sql = ‘select
@totalRecord = count(*) from ‘ + @TableName + ‘ where ‘ + @sqlWhere
EXEC sp_executesql @sql,N‘@totalRecord int OUTPUT‘,@totalRecord
OUTPUT--计算总记录数
--计算总页数
select
@TotalPage=CEILING((@totalRecord+0.0)/@PageSize)
end
if (@SqlWhere=‘‘ or @sqlWhere=NULL)
set @sql =
‘Select * FROM (select ROW_NUMBER() Over(order by ‘ + @OrderField + ‘) as
rowId,‘ + @Fields + ‘ from ‘ + @TableName
else
set @sql = ‘Select * FROM (select ROW_NUMBER() Over(order by ‘ + @OrderField +
‘) as rowId,‘ + @Fields + ‘ from ‘ + @TableName + ‘ where ‘ + @SqlWhere
--处理页数超出范围情况
if @PageIndex<=0
Set
@pageIndex = 1
if @pageIndex>@TotalPage
Set @pageIndex = @TotalPage
--处理开始点和结束点
Declare @StartRecord int
Declare @EndRecord
int
set @StartRecord = (@pageIndex-1)*@PageSize + 1
set @EndRecord = @StartRecord + @pageSize - 1
--继续合成sql语句
set @Sql = @Sql + ‘) as ‘ + @TableName + ‘ where rowId between
‘ + Convert(varchar(50),@StartRecord) + ‘ and ‘ +
Convert(varchar(50),@EndRecord)
Exec(@Sql)
---------------------------------------------------
If @@Error
<> 0
Begin
RollBack Tran
Return -1
End
Else
Begin
Commit Tran
Return @totalRecord
---返回记录总数
End
end
*
///
<summary>
///分页获取数据列表
/// </summary>
///
<returns></returns>
public static DataSet GetList(int
pageSize, int pageIndex,string tablename,string fieldname, string where, string
order, bool isCount, out int totalRecord)
{
totalRecord = 0;
SqlParameter totalPageParm = new
SqlParameter("@TotalPage", SqlDbType.Int);
totalPageParm.Direction = ParameterDirection.Output;
SqlParameter
totalRecordParm = new SqlParameter("@totalRecord", SqlDbType.Int);
totalRecordParm.Direction = ParameterDirection.Output;
SqlParameter[] parameters = {
new
SqlParameter("@TableName", SqlDbType.VarChar, 50),
new SqlParameter("@Fields", SqlDbType.VarChar, 5000),
new SqlParameter("@OrderField", SqlDbType.VarChar, 5000),
new SqlParameter("@sqlWhere", SqlDbType.VarChar, 5000),
new SqlParameter("@pageSize", SqlDbType.Int),
new SqlParameter("@pageIndex", SqlDbType.Int),
new
SqlParameter("@isCount", SqlDbType.Bit),
totalPageParm,totalRecordParm
};
parameters[0].Value = tablename; //表、视图名称
parameters[1].Value = fieldname;
//选择字段,全选用*
parameters[2].Value = order;
parameters[3].Value =
where;
parameters[4].Value = pageSize;
parameters[5].Value = pageIndex;
parameters[6].Value =
isCount;
CMS.DBUtility.SQL.DBHelpSP sqp = new
CMS.DBUtility.SQL.DBHelpSP();
DataSet ds =
sqp.ReturnDataSet(CMS.DBUtility.SQL.Configuration.ConnAdmin, "Page2005",
parameters);
if (isCount)
{
int.TryParse(totalRecordParm.Value.ToString(), out totalRecord);
}
return ds;
}
*/
#endregion
}
}