本文分三部分
1.数据抽象类(只有抽象,没有实现,由继承类去实现,以支持多种数据库)
2.mssql和sqlce数据库操作类的代码
3.一些用法
1.数据抽象类
数据库抽象类代码
using
System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace TestSQL
{
abstract public class SqlHelper
{
public abstract IDbConnection DBConn { get ;} // 事务的时候用到
public abstract IDbConnection GetDBConn();
public abstract Boolean TestConn();
public abstract int ExecSQL( string SqlStr);
public abstract int ExecSQL( string SqlStr, params object [] ParaValues);
public abstract DataSet DoSelect( string SqlStr);
public abstract DataSet DoSelect( string SqlStr, params object [] ParaValues);
public abstract DataTable DoSelectToTable( string SqlStr, string tablename);
public abstract DataTable DoSelectToTable( string SqlStr, string tablename, params object [] ParaValues);
public abstract IDataReader ExecReader( string SqlStr);
public abstract IDataReader ExecReader( string SqlStr, params object [] ParaValues);
public abstract object GetSingle( string SQLString);
public abstract object GetSingle( string SQLString, params object [] ParaValues);
public abstract int ExecuteSqlTran(List < String > SQLStringList);
public abstract bool ColumnExists( string tableName, string columnName);
public abstract bool TabExists( string TableName);
#region 公共操作类
#region 取得最大id+1
public int GetMaxID( string FieldName, string TableName)
{
string strsql = " select max( " + FieldName + " )+1 from " + TableName;
object obj = GetSingle(strsql);
if (obj == null )
{
return 1 ;
}
else
{
return int .Parse(obj.ToString());
}
}
#endregion
#region 是否存在记录(不带参数)
public bool HasRecord( string strSql)
{
object obj = GetSingle(strSql);
int cmdresult;
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
cmdresult = 0 ;
}
else
{
cmdresult = int .Parse(obj.ToString());
}
if (cmdresult == 0 )
{
return false ;
}
else
{
return true ;
}
}
#endregion
#region 是否存在记录(带参数)
public bool HasRecord( string strSql, params object [] ParaValues)
{
object obj = GetSingle(strSql, ParaValues);
int cmdresult;
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
cmdresult = 0 ;
}
else
{
cmdresult = int .Parse(obj.ToString());
}
if (cmdresult == 0 )
{
return false ;
}
else
{
return true ;
}
}
#endregion
#endregion
}
}
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace TestSQL
{
abstract public class SqlHelper
{
public abstract IDbConnection DBConn { get ;} // 事务的时候用到
public abstract IDbConnection GetDBConn();
public abstract Boolean TestConn();
public abstract int ExecSQL( string SqlStr);
public abstract int ExecSQL( string SqlStr, params object [] ParaValues);
public abstract DataSet DoSelect( string SqlStr);
public abstract DataSet DoSelect( string SqlStr, params object [] ParaValues);
public abstract DataTable DoSelectToTable( string SqlStr, string tablename);
public abstract DataTable DoSelectToTable( string SqlStr, string tablename, params object [] ParaValues);
public abstract IDataReader ExecReader( string SqlStr);
public abstract IDataReader ExecReader( string SqlStr, params object [] ParaValues);
public abstract object GetSingle( string SQLString);
public abstract object GetSingle( string SQLString, params object [] ParaValues);
public abstract int ExecuteSqlTran(List < String > SQLStringList);
public abstract bool ColumnExists( string tableName, string columnName);
public abstract bool TabExists( string TableName);
#region 公共操作类
#region 取得最大id+1
public int GetMaxID( string FieldName, string TableName)
{
string strsql = " select max( " + FieldName + " )+1 from " + TableName;
object obj = GetSingle(strsql);
if (obj == null )
{
return 1 ;
}
else
{
return int .Parse(obj.ToString());
}
}
#endregion
#region 是否存在记录(不带参数)
public bool HasRecord( string strSql)
{
object obj = GetSingle(strSql);
int cmdresult;
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
cmdresult = 0 ;
}
else
{
cmdresult = int .Parse(obj.ToString());
}
if (cmdresult == 0 )
{
return false ;
}
else
{
return true ;
}
}
#endregion
#region 是否存在记录(带参数)
public bool HasRecord( string strSql, params object [] ParaValues)
{
object obj = GetSingle(strSql, ParaValues);
int cmdresult;
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
cmdresult = 0 ;
}
else
{
cmdresult = int .Parse(obj.ToString());
}
if (cmdresult == 0 )
{
return false ;
}
else
{
return true ;
}
}
#endregion
#endregion
}
}
2.mssql数据库操作类
mssql数据库操作类代码
using
System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.Collections;
namespace TestSQL
{
public class MssqlDal: SqlHelper
{
private SqlConnection F_Conn;
private string connStr;
public MssqlDal( string DBConnStr)
{
connStr = DBConnStr;
F_Conn = GetDBConn() as SqlConnection;
}
public override IDbConnection DBConn
{
get { return F_Conn; }
}
#region 连接数据库
/// <summary>
/// 连接数据库
/// </summary>
/// <returns> IDbConnection </returns>
public override IDbConnection GetDBConn()
{
F_Conn = new SqlConnection(connStr);
try
{
if (ConnectionState.Closed == F_Conn.State)
{
F_Conn.Open();
}
}
catch (System.Data.SqlClient.SqlException ex)
{
// NLSSysCtrl.NKDbgPrintfW(ex.ToString() + "\r\n");
MessageBox.Show( " 数据库连接失败: " + ex.Message);
}
return F_Conn;
}
#endregion
#region 测试连接数据库
/// <summary>
/// 测试连接数据库
/// </summary>
/// <returns> Boolean </returns>
public override Boolean TestConn()
{
using (SqlConnection Conn = new SqlConnection(connStr))
{
try
{
Conn.Open();
return true ;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 数据库连接失败: " + ex.Message);
return false ;
}
}
}
#endregion
#region 执行SQL语句
/// <summary>
/// 执行不带参数的SQL语句
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> 返回影响行数 </returns>
public override int ExecSQL( string SqlStr)
{
using (SqlCommand cmd = new SqlCommand(SqlStr, F_Conn))
{
try
{
int val = cmd.ExecuteNonQuery();
return val;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 执行SQL语句失败: " + ex.Message + " \n " + SqlStr);
return 0 ;
}
}
}
/// <summary>
/// 执行带参数的SQL语句
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <param name="ParaValues"> 传入的参数值 </param>
/// <returns> 返回影响行数 </returns>
public override int ExecSQL( string SqlStr, params object [] ParaValues)
{
using (SqlCommand cmd = new SqlCommand(SqlStr, F_Conn))
{
try
{
int val = cmd.ExecuteNonQuery();
return val;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 执行SQL语句失败: " + ex.Message + " \n " + SqlStr);
return 0 ;
}
}
}
#endregion
#region 返回数据集
/// <summary>
/// 返回数据集(不带参数)
/// </summary>
/// <param name="SqlStr"> 需要查询的SQL语句 </param>
/// <returns> DataSet </returns>
public override DataSet DoSelect( string SqlStr)
{
try
{
SqlDataAdapter F_DataApt = new SqlDataAdapter(SqlStr, F_Conn);
DataSet F_DataSet = new DataSet();
F_DataApt.Fill(F_DataSet);
return F_DataSet;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
/// <summary>
/// 返回数据集(带参数)
/// </summary>
/// <param name="SqlStr"> 需要查询的SQL语句 </param>
/// <param name="ParaValues"> 传入的参数值 </param>
/// <returns> DataSet </returns>
public override DataSet DoSelect( string SqlStr, params object [] ParaValues)
{
using (SqlCommand cmd = CreateSqlCommand(SqlStr, ParaValues) )
{
try
{
SqlDataAdapter F_DataApt = new SqlDataAdapter();
F_DataApt.SelectCommand = cmd;
DataSet F_DataSet = new DataSet();
F_DataApt.Fill(F_DataSet);
return F_DataSet;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 返回DataTable
/// <summary>
/// 返回DataTable (不带参数)
/// </summary>
/// <param name="SqlStr"> sql语句 </param>
/// <param name="tablename"> 自定义的表名 </param>
/// <returns> DataTable </returns>
public override DataTable DoSelectToTable( string SqlStr, string tablename)
{
DataTable P_tbl; // 声明一个DataTable对象
try
{
SqlDataAdapter F_DataApt = new SqlDataAdapter(SqlStr, F_Conn);
P_tbl = new DataTable(tablename);
F_DataApt.Fill(P_tbl); // 将表中对象放入P_tbl中
return P_tbl;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
/// <summary>
/// 返回DataTable (带参数)
/// </summary>
/// <param name="SqlStr"> sql语句 </param>
/// <param name="ParaValues"> 参数数组 </param>
/// <param name="tablename"> 自定义的表名 </param>
/// <returns> DataTable </returns>
public override DataTable DoSelectToTable( string SqlStr, string tablename, params object [] ParaValues)
{
using (SqlCommand cmd = CreateSqlCommand(SqlStr, ParaValues))
{
DataTable P_tbl; // 声明一个DataTable对象
try
{
SqlDataAdapter F_DataApt = new SqlDataAdapter();
F_DataApt.SelectCommand = cmd;
P_tbl = new DataTable(tablename);
F_DataApt.Fill(P_tbl); // 将表中对象放入P_tbl中
return P_tbl;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 返回SqlDataReader类型数据
/// <summary>
/// 返回SqlDataReader类型数据(不带参数)
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> SqlDataReader </returns>
public override IDataReader ExecReader( string SqlStr)
{
using (SqlCommand cmd = new SqlCommand(SqlStr, F_Conn))
{
SqlDataReader P_Dr;
try
{
P_Dr = cmd.ExecuteReader();
return P_Dr;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
/// <summary>
/// 返回SqlDataReader类型数据(带参数)
/// </summary>
/// <param name="ParaValues"> 参数数组 </param>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> SqlDataReader </returns>
public override IDataReader ExecReader( string SqlStr, params object [] ParaValues)
{
using (SqlCommand cmd = CreateSqlCommand(SqlStr, ParaValues))
{
SqlDataReader P_Dr;
try
{
P_Dr = cmd.ExecuteReader();
return P_Dr;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 执行一条计算查询结果语句,返回查询结果(object)。
/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString"> 计算查询结果语句 </param>
/// <returns> 查询结果(object) </returns>
public override object GetSingle( string SQLString)
{
using (SqlCommand cmd = new SqlCommand(SQLString, F_Conn))
{
try
{
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 e;
}
}
}
/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString"> 计算查询结果语句 </param>
/// <returns> 查询结果(object) </returns>
public override object GetSingle( string SQLString, params object [] ParaValues)
{
using (SqlCommand cmd = CreateSqlCommand(SQLString, ParaValues))
{
try
{
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 e;
}
}
}
#endregion
#region 执行多条Sql语句(带事务)
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList"> 多条SQL语句 </param>
public override int ExecuteSqlTran(List < String > SQLStringList)
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = F_Conn;
SqlTransaction tx = F_Conn.BeginTransaction();
cmd.Transaction = tx;
try
{
int count = 0 ;
for ( int n = 0 ; n < SQLStringList.Count; n ++ )
{
string strsql = SQLStringList[n];
if (strsql.Trim().Length > 1 )
{
cmd.CommandText = strsql;
count += cmd.ExecuteNonQuery();
}
}
tx.Commit();
return count;
}
catch
{
tx.Rollback();
return 0 ;
}
}
}
#endregion
#region 准备sql语句
/// <summary>
/// 返回SqlDataReader类型数据(不带参数)
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <param name="values"> 参数数组 </param>
/// <returns> SqlCommand实例 </returns>
private SqlCommand CreateSqlCommand( string SqlStr, object [] values)
{
SqlCommand cmd = new SqlCommand(SqlStr, F_Conn); // 声明SqlCommand对象
// 从Sql语句中循环取得参数,并放到arrlist中
ArrayList arrlist = new ArrayList();
int j = 0 ;
Boolean Find = false ;
for ( int i = 0 ; i < SqlStr.Length; i ++ )
{
if (SqlStr[i] == ' @ ' )
{
j = i;
Find = true ;
}
if ((SqlStr[i] == ' ' || SqlStr[i] == ' ) ' || SqlStr[i] == ' , ' || i == SqlStr.Length - 1 ) && Find == true ) // 参数结尾标志
{
if (i == SqlStr.Length - 1 && SqlStr[i] != ')') arrlist.Add(SqlStr.Substring(j, i - j+1));
else arrlist.Add(SqlStr.Substring(j, i - j));
using System.Data;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.Collections;
namespace TestSQL
{
public class MssqlDal: SqlHelper
{
private SqlConnection F_Conn;
private string connStr;
public MssqlDal( string DBConnStr)
{
connStr = DBConnStr;
F_Conn = GetDBConn() as SqlConnection;
}
public override IDbConnection DBConn
{
get { return F_Conn; }
}
#region 连接数据库
/// <summary>
/// 连接数据库
/// </summary>
/// <returns> IDbConnection </returns>
public override IDbConnection GetDBConn()
{
F_Conn = new SqlConnection(connStr);
try
{
if (ConnectionState.Closed == F_Conn.State)
{
F_Conn.Open();
}
}
catch (System.Data.SqlClient.SqlException ex)
{
// NLSSysCtrl.NKDbgPrintfW(ex.ToString() + "\r\n");
MessageBox.Show( " 数据库连接失败: " + ex.Message);
}
return F_Conn;
}
#endregion
#region 测试连接数据库
/// <summary>
/// 测试连接数据库
/// </summary>
/// <returns> Boolean </returns>
public override Boolean TestConn()
{
using (SqlConnection Conn = new SqlConnection(connStr))
{
try
{
Conn.Open();
return true ;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 数据库连接失败: " + ex.Message);
return false ;
}
}
}
#endregion
#region 执行SQL语句
/// <summary>
/// 执行不带参数的SQL语句
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> 返回影响行数 </returns>
public override int ExecSQL( string SqlStr)
{
using (SqlCommand cmd = new SqlCommand(SqlStr, F_Conn))
{
try
{
int val = cmd.ExecuteNonQuery();
return val;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 执行SQL语句失败: " + ex.Message + " \n " + SqlStr);
return 0 ;
}
}
}
/// <summary>
/// 执行带参数的SQL语句
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <param name="ParaValues"> 传入的参数值 </param>
/// <returns> 返回影响行数 </returns>
public override int ExecSQL( string SqlStr, params object [] ParaValues)
{
using (SqlCommand cmd = new SqlCommand(SqlStr, F_Conn))
{
try
{
int val = cmd.ExecuteNonQuery();
return val;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 执行SQL语句失败: " + ex.Message + " \n " + SqlStr);
return 0 ;
}
}
}
#endregion
#region 返回数据集
/// <summary>
/// 返回数据集(不带参数)
/// </summary>
/// <param name="SqlStr"> 需要查询的SQL语句 </param>
/// <returns> DataSet </returns>
public override DataSet DoSelect( string SqlStr)
{
try
{
SqlDataAdapter F_DataApt = new SqlDataAdapter(SqlStr, F_Conn);
DataSet F_DataSet = new DataSet();
F_DataApt.Fill(F_DataSet);
return F_DataSet;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
/// <summary>
/// 返回数据集(带参数)
/// </summary>
/// <param name="SqlStr"> 需要查询的SQL语句 </param>
/// <param name="ParaValues"> 传入的参数值 </param>
/// <returns> DataSet </returns>
public override DataSet DoSelect( string SqlStr, params object [] ParaValues)
{
using (SqlCommand cmd = CreateSqlCommand(SqlStr, ParaValues) )
{
try
{
SqlDataAdapter F_DataApt = new SqlDataAdapter();
F_DataApt.SelectCommand = cmd;
DataSet F_DataSet = new DataSet();
F_DataApt.Fill(F_DataSet);
return F_DataSet;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 返回DataTable
/// <summary>
/// 返回DataTable (不带参数)
/// </summary>
/// <param name="SqlStr"> sql语句 </param>
/// <param name="tablename"> 自定义的表名 </param>
/// <returns> DataTable </returns>
public override DataTable DoSelectToTable( string SqlStr, string tablename)
{
DataTable P_tbl; // 声明一个DataTable对象
try
{
SqlDataAdapter F_DataApt = new SqlDataAdapter(SqlStr, F_Conn);
P_tbl = new DataTable(tablename);
F_DataApt.Fill(P_tbl); // 将表中对象放入P_tbl中
return P_tbl;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
/// <summary>
/// 返回DataTable (带参数)
/// </summary>
/// <param name="SqlStr"> sql语句 </param>
/// <param name="ParaValues"> 参数数组 </param>
/// <param name="tablename"> 自定义的表名 </param>
/// <returns> DataTable </returns>
public override DataTable DoSelectToTable( string SqlStr, string tablename, params object [] ParaValues)
{
using (SqlCommand cmd = CreateSqlCommand(SqlStr, ParaValues))
{
DataTable P_tbl; // 声明一个DataTable对象
try
{
SqlDataAdapter F_DataApt = new SqlDataAdapter();
F_DataApt.SelectCommand = cmd;
P_tbl = new DataTable(tablename);
F_DataApt.Fill(P_tbl); // 将表中对象放入P_tbl中
return P_tbl;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 返回SqlDataReader类型数据
/// <summary>
/// 返回SqlDataReader类型数据(不带参数)
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> SqlDataReader </returns>
public override IDataReader ExecReader( string SqlStr)
{
using (SqlCommand cmd = new SqlCommand(SqlStr, F_Conn))
{
SqlDataReader P_Dr;
try
{
P_Dr = cmd.ExecuteReader();
return P_Dr;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
/// <summary>
/// 返回SqlDataReader类型数据(带参数)
/// </summary>
/// <param name="ParaValues"> 参数数组 </param>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> SqlDataReader </returns>
public override IDataReader ExecReader( string SqlStr, params object [] ParaValues)
{
using (SqlCommand cmd = CreateSqlCommand(SqlStr, ParaValues))
{
SqlDataReader P_Dr;
try
{
P_Dr = cmd.ExecuteReader();
return P_Dr;
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 执行一条计算查询结果语句,返回查询结果(object)。
/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString"> 计算查询结果语句 </param>
/// <returns> 查询结果(object) </returns>
public override object GetSingle( string SQLString)
{
using (SqlCommand cmd = new SqlCommand(SQLString, F_Conn))
{
try
{
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 e;
}
}
}
/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString"> 计算查询结果语句 </param>
/// <returns> 查询结果(object) </returns>
public override object GetSingle( string SQLString, params object [] ParaValues)
{
using (SqlCommand cmd = CreateSqlCommand(SQLString, ParaValues))
{
try
{
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 e;
}
}
}
#endregion
#region 执行多条Sql语句(带事务)
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList"> 多条SQL语句 </param>
public override int ExecuteSqlTran(List < String > SQLStringList)
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = F_Conn;
SqlTransaction tx = F_Conn.BeginTransaction();
cmd.Transaction = tx;
try
{
int count = 0 ;
for ( int n = 0 ; n < SQLStringList.Count; n ++ )
{
string strsql = SQLStringList[n];
if (strsql.Trim().Length > 1 )
{
cmd.CommandText = strsql;
count += cmd.ExecuteNonQuery();
}
}
tx.Commit();
return count;
}
catch
{
tx.Rollback();
return 0 ;
}
}
}
#endregion
#region 准备sql语句
/// <summary>
/// 返回SqlDataReader类型数据(不带参数)
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <param name="values"> 参数数组 </param>
/// <returns> SqlCommand实例 </returns>
private SqlCommand CreateSqlCommand( string SqlStr, object [] values)
{
SqlCommand cmd = new SqlCommand(SqlStr, F_Conn); // 声明SqlCommand对象
// 从Sql语句中循环取得参数,并放到arrlist中
ArrayList arrlist = new ArrayList();
int j = 0 ;
Boolean Find = false ;
for ( int i = 0 ; i < SqlStr.Length; i ++ )
{
if (SqlStr[i] == ' @ ' )
{
j = i;
Find = true ;
}
if ((SqlStr[i] == ' ' || SqlStr[i] == ' ) ' || SqlStr[i] == ' , ' || i == SqlStr.Length - 1 ) && Find == true ) // 参数结尾标志
{
if (i == SqlStr.Length - 1 && SqlStr[i] != ')') arrlist.Add(SqlStr.Substring(j, i - j+1));
else arrlist.Add(SqlStr.Substring(j, i - j));
Find
=
false
;
}
}
// 赋值给参数
if (arrlist.Count == values.Length)
{
for ( int k = 0 ; k < arrlist.Count; k ++ )
{
// cmd.Parameters.Add(arrlist[k], null);
// cmd.Parameters[k].Value = values[k];
// 上面两名等同这句
cmd.Parameters.AddWithValue(arrlist[k].ToString(), values[k]);
}
}
else throw new Exception( " 参数的个数和传入值的个数不匹配! " );
return cmd;
}
#endregion
#region 表是否存在
/// <summary>
/// 表是否存在
/// </summary>
/// <param name="TableName"></param>
/// <returns></returns>
public override bool TabExists( string TableName)
{
string strsql = " select count(*) from sysobjects where id = object_id(N'[ " + TableName + " ]') and OBJECTPROPERTY(id, N'IsUserTable') = 1 " ;
// string strsql = "SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + TableName + "]') AND type in (N'U')";
object obj = GetSingle(strsql);
int cmdresult;
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
cmdresult = 0 ;
}
else
{
cmdresult = int .Parse(obj.ToString());
}
if (cmdresult == 0 )
{
return false ;
}
else
{
return true ;
}
}
#endregion
#region 字段是否存在
/// <summary>
/// 判断是否存在某表的某个字段
/// </summary>
/// <param name="tableName"> 表名称 </param>
/// <param name="columnName"> 列名称 </param>
/// <returns> 是否存在 </returns>
public override bool ColumnExists( string tableName, string columnName)
{
string sql = " select count(1) from syscolumns where [id]=object_id(' " + tableName + " ') and [name]=' " + columnName + " ' " ;
object res = GetSingle(sql);
if (res == null )
{
return false ;
}
return Convert.ToInt32(res) > 0 ;
}
#endregion
}
}
}
}
// 赋值给参数
if (arrlist.Count == values.Length)
{
for ( int k = 0 ; k < arrlist.Count; k ++ )
{
// cmd.Parameters.Add(arrlist[k], null);
// cmd.Parameters[k].Value = values[k];
// 上面两名等同这句
cmd.Parameters.AddWithValue(arrlist[k].ToString(), values[k]);
}
}
else throw new Exception( " 参数的个数和传入值的个数不匹配! " );
return cmd;
}
#endregion
#region 表是否存在
/// <summary>
/// 表是否存在
/// </summary>
/// <param name="TableName"></param>
/// <returns></returns>
public override bool TabExists( string TableName)
{
string strsql = " select count(*) from sysobjects where id = object_id(N'[ " + TableName + " ]') and OBJECTPROPERTY(id, N'IsUserTable') = 1 " ;
// string strsql = "SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + TableName + "]') AND type in (N'U')";
object obj = GetSingle(strsql);
int cmdresult;
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
cmdresult = 0 ;
}
else
{
cmdresult = int .Parse(obj.ToString());
}
if (cmdresult == 0 )
{
return false ;
}
else
{
return true ;
}
}
#endregion
#region 字段是否存在
/// <summary>
/// 判断是否存在某表的某个字段
/// </summary>
/// <param name="tableName"> 表名称 </param>
/// <param name="columnName"> 列名称 </param>
/// <returns> 是否存在 </returns>
public override bool ColumnExists( string tableName, string columnName)
{
string sql = " select count(1) from syscolumns where [id]=object_id(' " + tableName + " ') and [name]=' " + columnName + " ' " ;
object res = GetSingle(sql);
if (res == null )
{
return false ;
}
return Convert.ToInt32(res) > 0 ;
}
#endregion
}
}
3.sqlce数据库操作类
sqlce数据库操作类代码
using
System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;
using System.IO;
using System.Collections;
// 在引用添加System.Data.SqlServerCe;
namespace TestSQL
{
public class SqlceDal : SqlHelper
{
SqlCeConnection F_Conn;
public string SqlceConn;
public SqlceDal( string DBConnStr)
{
SqlceConn = DBConnStr;
F_Conn = GetDBConn() as SqlCeConnection;
}
public override IDbConnection DBConn
{
get { return F_Conn; }
}
#region 连接数据库
/// <summary>
/// 连接数据库
/// </summary>
/// <returns> IDbConnection </returns>
public override IDbConnection GetDBConn()
{
F_Conn = new SqlCeConnection(SqlceConn);
try
{
if (ConnectionState.Closed == F_Conn.State)
{
F_Conn.Open();
}
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 数据库连接失败: " + ex.Message);
}
return F_Conn;
}
#endregion
#region 测试连接数据库
/// <summary>
/// 测试连接数据库
/// </summary>
/// <returns> Boolean </returns>
public override Boolean TestConn()
{
using (SqlCeConnection Conn = new SqlCeConnection(SqlceConn))
{
try
{
Conn.Open();
return true ;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 数据库连接失败: " + ex.Message);
return false ;
}
}
}
#endregion
#region 执行SQL语句
/// <summary>
/// 执行不带参数的SQL语句
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> 返回影响行数 </returns>
public override int ExecSQL( string SqlStr)
{
using (SqlCeCommand cmd = new SqlCeCommand(SqlStr, F_Conn))
{
try
{
int val = cmd.ExecuteNonQuery();
return val;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 执行SQL语句失败: " + ex.Message + " \n " + SqlStr);
return 0 ;
}
}
}
/// <summary>
/// 执行带参数的SQL语句
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <param name="ParaValues"> 传入的参数值 </param>
/// <returns> 返回影响行数 </returns>
public override int ExecSQL( string SqlStr, params object [] ParaValues)
{
using (SqlCeCommand cmd = new SqlCeCommand(SqlStr, F_Conn))
{
try
{
int val = cmd.ExecuteNonQuery();
return val;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 执行SQL语句失败: " + ex.Message + " \n " + SqlStr);
return 0 ;
}
}
}
#endregion
#region 返回数据集
/// <summary>
/// 返回数据集(不带参数)
/// </summary>
/// <param name="SqlStr"> 需要查询的SQL语句 </param>
/// <returns> DataSet </returns>
public override DataSet DoSelect( string SqlStr)
{
try
{
SqlCeDataAdapter F_DataApt = new SqlCeDataAdapter(SqlStr, F_Conn);
DataSet F_DataSet = new DataSet();
F_DataApt.Fill(F_DataSet);
return F_DataSet;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
/// <summary>
/// 返回数据集(带参数)
/// </summary>
/// <param name="SqlStr"> 需要查询的SQL语句 </param>
/// <param name="ParaValues"> 传入的参数值 </param>
/// <returns> DataSet </returns>
public override DataSet DoSelect( string SqlStr, params object [] ParaValues)
{
using (SqlCeCommand cmd = CreateSqlCommand(SqlStr, ParaValues))
{
try
{
SqlCeDataAdapter F_DataApt = new SqlCeDataAdapter();
F_DataApt.SelectCommand = cmd;
DataSet F_DataSet = new DataSet();
F_DataApt.Fill(F_DataSet);
return F_DataSet;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 返回DataTable
/// <summary>
/// 返回DataTable (不带参数)
/// </summary>
/// <param name="SqlStr"> sql语句 </param>
/// <param name="tablename"> 自定义的表名 </param>
/// <returns> DataTable </returns>
public override DataTable DoSelectToTable( string SqlStr, string tablename)
{
DataTable P_tbl; // 声明一个DataTable对象
try
{
SqlCeDataAdapter F_DataApt = new SqlCeDataAdapter(SqlStr, F_Conn);
P_tbl = new DataTable(tablename);
F_DataApt.Fill(P_tbl); // 将表中对象放入P_tbl中
return P_tbl;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
/// <summary>
/// 返回DataTable (带参数)
/// </summary>
/// <param name="SqlStr"> sql语句 </param>
/// <param name="ParaValues"> 参数数组 </param>
/// <param name="tablename"> 自定义的表名 </param>
/// <returns> DataTable </returns>
public override DataTable DoSelectToTable( string SqlStr, string tablename, params object [] ParaValues)
{
using (SqlCeCommand cmd = CreateSqlCommand(SqlStr, ParaValues))
{
DataTable P_tbl; // 声明一个DataTable对象
try
{
SqlCeDataAdapter F_DataApt = new SqlCeDataAdapter();
F_DataApt.SelectCommand = cmd;
P_tbl = new DataTable(tablename);
F_DataApt.Fill(P_tbl); // 将表中对象放入P_tbl中
return P_tbl;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 返回SqlDataReader类型数据
/// <summary>
/// 返回SqlDataReader类型数据(不带参数)
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> SqlDataReader </returns>
public override IDataReader ExecReader( string SqlStr)
{
using (SqlCeCommand cmd = new SqlCeCommand(SqlStr, F_Conn))
{
SqlCeDataReader P_Dr;
try
{
P_Dr = cmd.ExecuteReader();
return P_Dr;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
/// <summary>
/// 返回SqlDataReader类型数据(带参数)
/// </summary>
/// <param name="ParaValues"> 参数数组 </param>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> SqlDataReader </returns>
public override IDataReader ExecReader( string SqlStr, params object [] ParaValues)
{
using (SqlCeCommand cmd = CreateSqlCommand(SqlStr, ParaValues))
{
SqlCeDataReader P_Dr;
try
{
P_Dr = cmd.ExecuteReader();
return P_Dr;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 执行一条计算查询结果语句,返回查询结果(object)。
/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString"> 计算查询结果语句 </param>
/// <returns> 查询结果(object) </returns>
public override object GetSingle( string SQLString)
{
using (SqlCeCommand cmd = new SqlCeCommand(SQLString, F_Conn))
{
try
{
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
return null ;
}
else
{
return obj;
}
}
catch (System.Data.SqlServerCe.SqlCeException e)
{
throw e;
}
}
}
/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString"> 计算查询结果语句 </param>
/// <returns> 查询结果(object) </returns>
public override object GetSingle( string SQLString, params object [] ParaValues)
{
using (SqlCeCommand cmd = CreateSqlCommand(SQLString, ParaValues))
{
try
{
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
return null ;
}
else
{
return obj;
}
}
catch (System.Data.SqlServerCe.SqlCeException e)
{
throw e;
}
}
}
#endregion
#region 执行多条Sql语句(带事务)
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList"> 多条SQL语句 </param>
public override int ExecuteSqlTran(List < String > SQLStringList)
{
using (SqlCeCommand cmd = new SqlCeCommand())
{
cmd.Connection = F_Conn;
SqlCeTransaction tx = F_Conn.BeginTransaction();
cmd.Transaction = tx;
try
{
int count = 0 ;
for ( int n = 0 ; n < SQLStringList.Count; n ++ )
{
string strsql = SQLStringList[n];
if (strsql.Trim().Length > 1 )
{
cmd.CommandText = strsql;
count += cmd.ExecuteNonQuery();
}
}
tx.Commit();
return count;
}
catch
{
tx.Rollback();
return 0 ;
}
}
}
#endregion
#region 准备sql语句
/// <summary>
/// 返回SqlDataReader类型数据(不带参数)
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <param name="values"> 参数数组 </param>
/// <returns> SqlCommand实例 </returns>
private SqlCeCommand CreateSqlCommand( string SqlStr, object [] values)
{
SqlCeCommand cmd = new SqlCeCommand(SqlStr, F_Conn); // 声明SqlCommand对象
// 从Sql语句中循环取得参数,并放到arrlist中
ArrayList arrlist = new ArrayList();
int j = 0 ;
Boolean Find = false ;
for ( int i = 0 ; i < SqlStr.Length; i ++ )
{
if (SqlStr[i] == ' @ ' )
{
j = i;
Find = true ;
}
if ((SqlStr[i] == ' ' || SqlStr[i] == ' ) ' || SqlStr[i] == ' , ' || i == SqlStr.Length - 1 ) && Find == true ) // 参数结尾标志
{
if (i == SqlStr.Length - 1 && SqlStr[i] != ')') arrlist.Add(SqlStr.Substring(j, i - j+1));
else arrlist.Add(SqlStr.Substring(j, i - j));
using System.Data;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;
using System.IO;
using System.Collections;
// 在引用添加System.Data.SqlServerCe;
namespace TestSQL
{
public class SqlceDal : SqlHelper
{
SqlCeConnection F_Conn;
public string SqlceConn;
public SqlceDal( string DBConnStr)
{
SqlceConn = DBConnStr;
F_Conn = GetDBConn() as SqlCeConnection;
}
public override IDbConnection DBConn
{
get { return F_Conn; }
}
#region 连接数据库
/// <summary>
/// 连接数据库
/// </summary>
/// <returns> IDbConnection </returns>
public override IDbConnection GetDBConn()
{
F_Conn = new SqlCeConnection(SqlceConn);
try
{
if (ConnectionState.Closed == F_Conn.State)
{
F_Conn.Open();
}
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 数据库连接失败: " + ex.Message);
}
return F_Conn;
}
#endregion
#region 测试连接数据库
/// <summary>
/// 测试连接数据库
/// </summary>
/// <returns> Boolean </returns>
public override Boolean TestConn()
{
using (SqlCeConnection Conn = new SqlCeConnection(SqlceConn))
{
try
{
Conn.Open();
return true ;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 数据库连接失败: " + ex.Message);
return false ;
}
}
}
#endregion
#region 执行SQL语句
/// <summary>
/// 执行不带参数的SQL语句
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> 返回影响行数 </returns>
public override int ExecSQL( string SqlStr)
{
using (SqlCeCommand cmd = new SqlCeCommand(SqlStr, F_Conn))
{
try
{
int val = cmd.ExecuteNonQuery();
return val;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 执行SQL语句失败: " + ex.Message + " \n " + SqlStr);
return 0 ;
}
}
}
/// <summary>
/// 执行带参数的SQL语句
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <param name="ParaValues"> 传入的参数值 </param>
/// <returns> 返回影响行数 </returns>
public override int ExecSQL( string SqlStr, params object [] ParaValues)
{
using (SqlCeCommand cmd = new SqlCeCommand(SqlStr, F_Conn))
{
try
{
int val = cmd.ExecuteNonQuery();
return val;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 执行SQL语句失败: " + ex.Message + " \n " + SqlStr);
return 0 ;
}
}
}
#endregion
#region 返回数据集
/// <summary>
/// 返回数据集(不带参数)
/// </summary>
/// <param name="SqlStr"> 需要查询的SQL语句 </param>
/// <returns> DataSet </returns>
public override DataSet DoSelect( string SqlStr)
{
try
{
SqlCeDataAdapter F_DataApt = new SqlCeDataAdapter(SqlStr, F_Conn);
DataSet F_DataSet = new DataSet();
F_DataApt.Fill(F_DataSet);
return F_DataSet;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
/// <summary>
/// 返回数据集(带参数)
/// </summary>
/// <param name="SqlStr"> 需要查询的SQL语句 </param>
/// <param name="ParaValues"> 传入的参数值 </param>
/// <returns> DataSet </returns>
public override DataSet DoSelect( string SqlStr, params object [] ParaValues)
{
using (SqlCeCommand cmd = CreateSqlCommand(SqlStr, ParaValues))
{
try
{
SqlCeDataAdapter F_DataApt = new SqlCeDataAdapter();
F_DataApt.SelectCommand = cmd;
DataSet F_DataSet = new DataSet();
F_DataApt.Fill(F_DataSet);
return F_DataSet;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 返回DataTable
/// <summary>
/// 返回DataTable (不带参数)
/// </summary>
/// <param name="SqlStr"> sql语句 </param>
/// <param name="tablename"> 自定义的表名 </param>
/// <returns> DataTable </returns>
public override DataTable DoSelectToTable( string SqlStr, string tablename)
{
DataTable P_tbl; // 声明一个DataTable对象
try
{
SqlCeDataAdapter F_DataApt = new SqlCeDataAdapter(SqlStr, F_Conn);
P_tbl = new DataTable(tablename);
F_DataApt.Fill(P_tbl); // 将表中对象放入P_tbl中
return P_tbl;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
/// <summary>
/// 返回DataTable (带参数)
/// </summary>
/// <param name="SqlStr"> sql语句 </param>
/// <param name="ParaValues"> 参数数组 </param>
/// <param name="tablename"> 自定义的表名 </param>
/// <returns> DataTable </returns>
public override DataTable DoSelectToTable( string SqlStr, string tablename, params object [] ParaValues)
{
using (SqlCeCommand cmd = CreateSqlCommand(SqlStr, ParaValues))
{
DataTable P_tbl; // 声明一个DataTable对象
try
{
SqlCeDataAdapter F_DataApt = new SqlCeDataAdapter();
F_DataApt.SelectCommand = cmd;
P_tbl = new DataTable(tablename);
F_DataApt.Fill(P_tbl); // 将表中对象放入P_tbl中
return P_tbl;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 返回SqlDataReader类型数据
/// <summary>
/// 返回SqlDataReader类型数据(不带参数)
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> SqlDataReader </returns>
public override IDataReader ExecReader( string SqlStr)
{
using (SqlCeCommand cmd = new SqlCeCommand(SqlStr, F_Conn))
{
SqlCeDataReader P_Dr;
try
{
P_Dr = cmd.ExecuteReader();
return P_Dr;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
/// <summary>
/// 返回SqlDataReader类型数据(带参数)
/// </summary>
/// <param name="ParaValues"> 参数数组 </param>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <returns> SqlDataReader </returns>
public override IDataReader ExecReader( string SqlStr, params object [] ParaValues)
{
using (SqlCeCommand cmd = CreateSqlCommand(SqlStr, ParaValues))
{
SqlCeDataReader P_Dr;
try
{
P_Dr = cmd.ExecuteReader();
return P_Dr;
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
MessageBox.Show( " 查询SQL语句失败: " + ex.Message + " \n " + SqlStr);
return null ;
}
}
}
#endregion
#region 执行一条计算查询结果语句,返回查询结果(object)。
/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString"> 计算查询结果语句 </param>
/// <returns> 查询结果(object) </returns>
public override object GetSingle( string SQLString)
{
using (SqlCeCommand cmd = new SqlCeCommand(SQLString, F_Conn))
{
try
{
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
return null ;
}
else
{
return obj;
}
}
catch (System.Data.SqlServerCe.SqlCeException e)
{
throw e;
}
}
}
/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString"> 计算查询结果语句 </param>
/// <returns> 查询结果(object) </returns>
public override object GetSingle( string SQLString, params object [] ParaValues)
{
using (SqlCeCommand cmd = CreateSqlCommand(SQLString, ParaValues))
{
try
{
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
return null ;
}
else
{
return obj;
}
}
catch (System.Data.SqlServerCe.SqlCeException e)
{
throw e;
}
}
}
#endregion
#region 执行多条Sql语句(带事务)
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList"> 多条SQL语句 </param>
public override int ExecuteSqlTran(List < String > SQLStringList)
{
using (SqlCeCommand cmd = new SqlCeCommand())
{
cmd.Connection = F_Conn;
SqlCeTransaction tx = F_Conn.BeginTransaction();
cmd.Transaction = tx;
try
{
int count = 0 ;
for ( int n = 0 ; n < SQLStringList.Count; n ++ )
{
string strsql = SQLStringList[n];
if (strsql.Trim().Length > 1 )
{
cmd.CommandText = strsql;
count += cmd.ExecuteNonQuery();
}
}
tx.Commit();
return count;
}
catch
{
tx.Rollback();
return 0 ;
}
}
}
#endregion
#region 准备sql语句
/// <summary>
/// 返回SqlDataReader类型数据(不带参数)
/// </summary>
/// <param name="SqlStr"> 要执行的SQL语句 </param>
/// <param name="values"> 参数数组 </param>
/// <returns> SqlCommand实例 </returns>
private SqlCeCommand CreateSqlCommand( string SqlStr, object [] values)
{
SqlCeCommand cmd = new SqlCeCommand(SqlStr, F_Conn); // 声明SqlCommand对象
// 从Sql语句中循环取得参数,并放到arrlist中
ArrayList arrlist = new ArrayList();
int j = 0 ;
Boolean Find = false ;
for ( int i = 0 ; i < SqlStr.Length; i ++ )
{
if (SqlStr[i] == ' @ ' )
{
j = i;
Find = true ;
}
if ((SqlStr[i] == ' ' || SqlStr[i] == ' ) ' || SqlStr[i] == ' , ' || i == SqlStr.Length - 1 ) && Find == true ) // 参数结尾标志
{
if (i == SqlStr.Length - 1 && SqlStr[i] != ')') arrlist.Add(SqlStr.Substring(j, i - j+1));
else arrlist.Add(SqlStr.Substring(j, i - j));
Find
=
false
;
}
}
// 赋值给参数
if (arrlist.Count == values.Length)
{
for ( int k = 0 ; k < arrlist.Count; k ++ )
{
// cmd.Parameters.Add(arrlist[k], null);
// cmd.Parameters[k].Value = values[k];
// 上面两名等同这句
cmd.Parameters.AddWithValue(arrlist[k].ToString(), values[k]);
}
}
else throw new Exception( " 参数的个数和传入值的个数不匹配! " );
return cmd;
}
#endregion
#region 表是否存在
/// <summary>
/// 表是否存在
/// </summary>
/// <param name="TableName"></param>
/// <returns></returns>
public override bool TabExists( string TableName)
{
string strsql = " select count(*) from information_schema.tables where table_name = ' " + TableName + " ' " ;
object obj = GetSingle(strsql);
int cmdresult;
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
cmdresult = 0 ;
}
else
{
cmdresult = int .Parse(obj.ToString());
}
if (cmdresult == 0 )
{
return false ;
}
else
{
return true ;
}
}
#endregion
#region 字段是否存在
/// <summary>
/// 判断是否存在某表的某个字段
/// </summary>
/// <param name="tableName"> 表名称 </param>
/// <param name="columnName"> 列名称 </param>
/// <returns> 是否存在 </returns>
public override bool ColumnExists( string tableName, string columnName)
{
string sql = " select count(1) from information_schema.columns where table_name = ' " + TableName + " ' and column_name=' " + columnName + " ' " ;
object res = GetSingle(sql);
if (res == null )
{
return false ;
}
return Convert.ToInt32(res) > 0 ;
}
#endregion
}
}
}
}
// 赋值给参数
if (arrlist.Count == values.Length)
{
for ( int k = 0 ; k < arrlist.Count; k ++ )
{
// cmd.Parameters.Add(arrlist[k], null);
// cmd.Parameters[k].Value = values[k];
// 上面两名等同这句
cmd.Parameters.AddWithValue(arrlist[k].ToString(), values[k]);
}
}
else throw new Exception( " 参数的个数和传入值的个数不匹配! " );
return cmd;
}
#endregion
#region 表是否存在
/// <summary>
/// 表是否存在
/// </summary>
/// <param name="TableName"></param>
/// <returns></returns>
public override bool TabExists( string TableName)
{
string strsql = " select count(*) from information_schema.tables where table_name = ' " + TableName + " ' " ;
object obj = GetSingle(strsql);
int cmdresult;
if ((Object.Equals(obj, null )) || (Object.Equals(obj, System.DBNull.Value)))
{
cmdresult = 0 ;
}
else
{
cmdresult = int .Parse(obj.ToString());
}
if (cmdresult == 0 )
{
return false ;
}
else
{
return true ;
}
}
#endregion
#region 字段是否存在
/// <summary>
/// 判断是否存在某表的某个字段
/// </summary>
/// <param name="tableName"> 表名称 </param>
/// <param name="columnName"> 列名称 </param>
/// <returns> 是否存在 </returns>
public override bool ColumnExists( string tableName, string columnName)
{
string sql = " select count(1) from information_schema.columns where table_name = ' " + TableName + " ' and column_name=' " + columnName + " ' " ;
object res = GetSingle(sql);
if (res == null )
{
return false ;
}
return Convert.ToInt32(res) > 0 ;
}
#endregion
}
}
其它的数据操作类也参考上面的来写.
3.一些用法
执行SQL语句
private
void
button1_Click(
object
sender, EventArgs e)
{
// 生成mssql 实例
SqlHelper mssql = new MssqlDal( " Data Source = 192.168.3.104;Initial Catalog = s7100;USER ID = sa;PASSWORD = " );
// 生成sqlce 实例
string sqlcePath = Path.Combine(Application.StartupPath, " checkgun.sdf " );
SqlHelper sqlce = new SqlceDal( @" Data Source= " + sqlcePath);
// 使用mssql数据库
// object[] paraValues ={ 15, "新品" };
// IDataReader dr = mssql.ExecReader("select * from warebase where wbid>@wbid and wbtype=@type", paraValues);
// 下面这句跟上面2句的效果一样
IDataReader dr = mssql.ExecReader( " select * from warebase where wbid>@wbid and wbtype=@type " , 15 , " 新品 " );
while (dr.Read())
{
txtScript.Text = txtScript.Text + dr[ " wbcname " ] + " \r\n " ;
{
// 生成mssql 实例
SqlHelper mssql = new MssqlDal( " Data Source = 192.168.3.104;Initial Catalog = s7100;USER ID = sa;PASSWORD = " );
// 生成sqlce 实例
string sqlcePath = Path.Combine(Application.StartupPath, " checkgun.sdf " );
SqlHelper sqlce = new SqlceDal( @" Data Source= " + sqlcePath);
// 使用mssql数据库
// object[] paraValues ={ 15, "新品" };
// IDataReader dr = mssql.ExecReader("select * from warebase where wbid>@wbid and wbtype=@type", paraValues);
// 下面这句跟上面2句的效果一样
IDataReader dr = mssql.ExecReader( " select * from warebase where wbid>@wbid and wbtype=@type " , 15 , " 新品 " );
while (dr.Read())
{
txtScript.Text = txtScript.Text + dr[ " wbcname " ] + " \r\n " ;
}
dr.Close(); // 务必要释放
DataSet ds = sqlce.DoSelect( " select * from warebase " );
for ( int i = 0 ; i < ds.Tables[ 0 ].Rows.Count; i ++ )
{
txtScript.Text = txtScript.Text + ds.Tables[ 0 ].Rows[i][ " wbcname " ].ToString() + " \r\n " ;
}
// 使用sqlce数据库
DataSet ds = sqlce.DoSelect( " select * from globarea where gacode>@code " , 1002 );
for ( int i = 0 ; i < ds.Tables[ 0 ].Rows.Count; i ++ )
{
txtScript.Text = txtScript.Text + ds.Tables[ 0 ].Rows[i][ " ganame " ].ToString() + " \r\n " ;
}
DataTable dt = sql.DoSelectToTable( " select * from globarea " , " gatable " );
for ( int i = 0 ; i < dt.Rows.Count; i ++ )
{
txtScript.Text = txtScript.Text + dt.Rows[i][ " ganame " ].ToString() + " \r\n " ;
}
}
dr.Close(); // 务必要释放
DataSet ds = sqlce.DoSelect( " select * from warebase " );
for ( int i = 0 ; i < ds.Tables[ 0 ].Rows.Count; i ++ )
{
txtScript.Text = txtScript.Text + ds.Tables[ 0 ].Rows[i][ " wbcname " ].ToString() + " \r\n " ;
}
// 使用sqlce数据库
DataSet ds = sqlce.DoSelect( " select * from globarea where gacode>@code " , 1002 );
for ( int i = 0 ; i < ds.Tables[ 0 ].Rows.Count; i ++ )
{
txtScript.Text = txtScript.Text + ds.Tables[ 0 ].Rows[i][ " ganame " ].ToString() + " \r\n " ;
}
DataTable dt = sql.DoSelectToTable( " select * from globarea " , " gatable " );
for ( int i = 0 ; i < dt.Rows.Count; i ++ )
{
txtScript.Text = txtScript.Text + dt.Rows[i][ " ganame " ].ToString() + " \r\n " ;
}
}
范例二:可抽出用于不同数据库间导数据
两个库之间拷数据(这里从mssql拷数据到sqlce)
private
void
button2_Click(
object
sender, EventArgs e)
{
// 生成mssql 实例
SqlHelper mssql = new MssqlDal( " Data Source = 192.168.3.104;Initial Catalog = s7100;USER ID = sa;PASSWORD = " );
// 生成sqlce 实例
string sqlcePath = Path.Combine(Application.StartupPath, " checkgun.sdf " );
SqlHelper sqlce = new SqlceDal( @" Data Source= " + sqlcePath);
// sqlce.ExecSQL("delete from localpara");
// IDataReader dr = mssql.ExecReader("select * from localpara");
// 或者
// IDataReader dr = mssql.ExecReader("select lparaid, lparacode, lparaname, lparavalue from localpara");
// 或者
IDataReader dr = mssql.ExecReader( " select dcid lparaid,dccode lparacode,dcname lparaname,dcvalues lparavalue from dbconfig " );
try
{
DataTable scheamTable = dr.GetSchemaTable(); // 取得表信息
// 生成 Sqlce 数据插入 SQL 语句
StringBuilder sbFields = new StringBuilder();
StringBuilder sbParams = new StringBuilder();
string field, param;
DataRow schemaRow;
for ( int i = 0 ; i < scheamTable.Rows.Count; i ++ )
{
if (i != 0 )
{
sbFields.Append( " , " );
sbParams.Append( " , " );
}
schemaRow = scheamTable.Rows[i];
field = string .Format( " [{0}] " , schemaRow[ " ColumnName " ]); // 字段名称
param = " @ " + (( string )schemaRow[ " ColumnName " ]).Replace( " " , " _ " ); // 参数名称
sbFields.Append(field);
sbParams.Append(param);
}
string insertSql = string .Format( " INSERT INTO [{0}]({1}) VALUES({2}) " , " localpara " , sbFields, sbParams);
// 执行数据导入
object [] values;
while (dr.Read())
{
values = new object [dr.FieldCount];
dr.GetValues(values);
sqlce.ExecSQL(insertSql, values);
}
}
catch (Exception ex)
{
MessageBox.Show( " 导入失败 " + " \r\n " + " 错误信息: " + ex.ToString() + " \r\n " );
}
finally
{
if (dr != null && dr.IsClosed == false )
{
dr.Close();
dr.Dispose();
}
}
}
{
// 生成mssql 实例
SqlHelper mssql = new MssqlDal( " Data Source = 192.168.3.104;Initial Catalog = s7100;USER ID = sa;PASSWORD = " );
// 生成sqlce 实例
string sqlcePath = Path.Combine(Application.StartupPath, " checkgun.sdf " );
SqlHelper sqlce = new SqlceDal( @" Data Source= " + sqlcePath);
// sqlce.ExecSQL("delete from localpara");
// IDataReader dr = mssql.ExecReader("select * from localpara");
// 或者
// IDataReader dr = mssql.ExecReader("select lparaid, lparacode, lparaname, lparavalue from localpara");
// 或者
IDataReader dr = mssql.ExecReader( " select dcid lparaid,dccode lparacode,dcname lparaname,dcvalues lparavalue from dbconfig " );
try
{
DataTable scheamTable = dr.GetSchemaTable(); // 取得表信息
// 生成 Sqlce 数据插入 SQL 语句
StringBuilder sbFields = new StringBuilder();
StringBuilder sbParams = new StringBuilder();
string field, param;
DataRow schemaRow;
for ( int i = 0 ; i < scheamTable.Rows.Count; i ++ )
{
if (i != 0 )
{
sbFields.Append( " , " );
sbParams.Append( " , " );
}
schemaRow = scheamTable.Rows[i];
field = string .Format( " [{0}] " , schemaRow[ " ColumnName " ]); // 字段名称
param = " @ " + (( string )schemaRow[ " ColumnName " ]).Replace( " " , " _ " ); // 参数名称
sbFields.Append(field);
sbParams.Append(param);
}
string insertSql = string .Format( " INSERT INTO [{0}]({1}) VALUES({2}) " , " localpara " , sbFields, sbParams);
// 执行数据导入
object [] values;
while (dr.Read())
{
values = new object [dr.FieldCount];
dr.GetValues(values);
sqlce.ExecSQL(insertSql, values);
}
}
catch (Exception ex)
{
MessageBox.Show( " 导入失败 " + " \r\n " + " 错误信息: " + ex.ToString() + " \r\n " );
}
finally
{
if (dr != null && dr.IsClosed == false )
{
dr.Close();
dr.Dispose();
}
}
}
后记:
1.这里提供个思路,功能和效率还可以再改进
2.有个疑问:是否每执行一条SQL语句就断开数据库的连接?
欢迎提示改进意见