操作 sqlite封装的一个类库.docx
《操作 sqlite封装的一个类库.docx》由会员分享,可在线阅读,更多相关《操作 sqlite封装的一个类库.docx(14页珍藏版)》请在冰豆网上搜索。
操作sqlite封装的一个类库
操作sqlite封装的一个类库
在wince设备上,使用sqlite很方便,基本都能满足项目的需要,速度也不错。
在工作中,封装了此类,方便开发。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data.SQLite;
usingSystem.Data;
usingSystem.IO;
namespaceAustec.DB
{
publicclassCSqlite:
IDisposable
{
publicstringm_LastError=null;
privatestringdbPath="";
privateSQLiteConnectionsqConn=null;
privateSQLiteCommandsqCmd=null;
privateSQLiteTransactiontransaction=null;
privateboolm_Result=false;
publicboolResult
{
get{returnm_Result;}
}
///<summary>
///不允许通过该方式构造此类
///</summary>
privateCSqlite(){}
///<summary>
///打开数据库
///</summary>
///<paramname="dbPath">数据库路径</param>
publicCSqlite(stringdbPath)
{
this.dbPath=dbPath;
}
~CSqlite()
{
Close();
}
#region打开与关闭
publicboolOpen()
{
try
{
m_Result=false;
if(sqConn==null)
{
//在打开数据库时,会判断数据库是否存在,如果不存在,则在当前目录下创建一个
sqConn=newSQLiteConnection("DataSource="+dbPath+";Pooling=true;FailIfMissing=false");
sqCmd=newSQLiteCommand();
sqCmd.Connection=sqConn;
}
if(sqConn.State==ConnectionState.Closed)
{
booldbExsit=System.IO.File.Exists(dbPath);
sqConn.Open();
///如果数据库不存在,sqlite会创建一个空的数据库,在此创建一个无用的表,填充数据库
if(!
dbExsit)
{
ExecuteNonQuery("createtableLiang(idnvarchar
(1))");
}
}
m_Result=true;
returntrue;
}
catch(System.Exceptionex)
{
m_LastError=ex.Message;
returnfalse;
}
}
publicvoidDispose()
{
Close();
}
publicvoidClose()
{
if(sqConn!
=null)
{
if(sqConn.State==ConnectionState.Open)
{
sqConn.Close();
sqConn=null;
sqCmd=null;
}
}
System.Data.SQLite.SQLiteConnection.ClearAllPools();
}
#endregion
///<summary>
///执行不带返回结果的命令
///</summary>
///<paramname="sqlCmd">查询语句</param>
///<returns></returns>
publicboolExecuteNonQuery(stringsqlCmd)
{
m_LastError=null;
m_Result=false;
try
{
sqCmd.CommandText=sqlCmd;
sqCmd.ExecuteNonQuery();
m_Result=true;
}
catch(System.Exceptionex)
{
m_LastError=ex.Message;
returnfalse;
}
returntrue;
}
///<summary>
///执行SQL命令,并返回Read,Read使用完毕,必须关闭
///</summary>
///<paramname="sqlCmd"></param>
///<returns></returns>
publicSQLiteDataReaderExecuteQuery(stringsqlCmd)
{
m_LastError=null;
m_Result=false;
try
{
sqCmd.CommandText=sqlCmd;
SQLiteDataReaderread=sqCmd.ExecuteReader();
m_Result=true;
returnread;
}
catch(System.Exceptionex)
{
m_LastError=ex.Message;
returnnull;
}
}
///<summary>
///执行SQL命令,并返回Read,Read使用完毕,必须关闭
///</summary>
///<paramname="sqlCmd"></param>
///<returns></returns>
publicboolExecuteQueryTable(stringsqlCmd,outDataTabledt)
{
m_LastError=null;
m_Result=false;
dt=newDataTable("liang");
try
{
//执行查询命令
SQLiteDataReaderread=ExecuteQuery(sqlCmd);
if(m_Result)
{
m_Result=false;
if(read==null)
{
m_LastError="sqliteerror:
未查询到数据!
";
returnfalse;
}
///添充表
for(inti=0;i<read.FieldCount;i++)
{
dt.Columns.Add(newDataColumn(i.ToString()));
}
while(read.Read())
{
DataRowrow=dt.NewRow();
for(inti=0;i<read.FieldCount;i++)
{
row[i]=read.GetValue(i).ToString();
}
dt.Rows.Add(row);
}
read.Close();
m_Result=true;
returntrue;
}
returnfalse;
}
catch(System.Exceptionex)
{
m_LastError=ex.Message;
returnfalse;
}
}
///<summary>
///执行SQL命令,并返回第一行记录的第一列值
///</summary>
///<paramname="sqlCmd"></param>
///<returns></returns>
publicobjectExecuteScalar(stringsqlCmd)
{
m_LastError=null;
m_Result=false;
try
{
sqCmd.CommandText=sqlCmd;
objectob=sqCmd.ExecuteScalar();
if(ob!
=null)
{
m_Result=true;
}
else
{
m_LastError="sqliteerror:
未查询到数据";
}
returnob;
}
catch(System.Exceptionex)
{
m_LastError=ex.Message;
returnnull;
}
}
///<summary>
///按照内存表的结构创建表及索引;如果表已经存在,将直接返回
///</summary>
///<paramname="dt">在创建的表</param>
///<paramname="strIndexField">索引字段,多个字段以逗号分隔</param>
///<returns></returns>
publicboolCreateTable(refDataTabledt,stringstrIndexField)
{
try
{
m_Result=false;
if(dt==null)
{
returnfalse;
}
//查询表有没有存在
stringsql="selectcount(*)fromsqlite_masterwheretbl_name='"+dt.TableName+"'andtype='table'";
objectob=ExecuteScalar(sql);
if(!
m_Result)
{
returnfalse;
}
if(Convert.ToInt32(ob)==1)
{
m_Result=true;
returntrue;
}
stringstrSql="",strCmdSql="";
strCmdSql="CREATETABLE"+dt.TableName+"(";
for(inti=0;i<dt.Columns.Count;i++)
{
strSql+=dt.Columns[i].ColumnName+"nvarchar(30)";
if(i<dt.Columns.Count-1)
{
strSql+=",";
}
}
strCmdSql+=strSql+")";
if(!
ExecuteNonQuery(strCmdSql))
{
returnfalse;
}
if(strIndexField!
=null&&strIndexField.Trim().Length>0)
{
string[]strIndex=strIndexField.Split(',');
for(inti=0;i<strIndex.Length;i++)
{
strCmdSql="CREATEINDEX"+dt.TableName+"_index"+i.ToString()+"ON"+dt.TableName+"("+strIndex[i]+")";
if(!
ExecuteNonQuery(strCmdSql))
{
returnfalse;
}
}
}
m_Result=true;
returntrue;
}
catch(System.Exceptionex)
{
m_LastError=ex.Message;
returnfalse;
}
}
///<summary>
///删除表及表的索引
///</summary>
///<paramname="tablename"></param>
///<returns></returns>
publicboolDropTableAndIndex(stringtablename)
{
m_Result=false;
try
{
//查询表及索引有没有存在
stringsql="selectcount(*)fromsqlite_masterwheretbl_name='"+tablename+"'andtype='table'";
objectob=ExecuteScalar(sql);
if(!
m_Result)
{
returnfalse;
}
if(Convert.ToInt32(ob)==0)
{
m_Result=true;
returntrue;
}
stringcmdSql="droptable"+tablename;
if(!
ExecuteNonQuery(cmdSql))
{
returnfalse;
}
m_Result=true;
returntrue;
}
catch(System.Exceptionex)
{
m_LastError=ex.Message;
returnfalse;
}
}
///<summary>
///将内存表插入相应的表中
///</summary>
///<paramname="dt"></param>
///<returns></returns>
publicboolInsertTable(refDataTabledt)
{
m_Result=false;
if(dt==null)
{
returnfalse;
}
if(dt.Rows.Count==0)
{
m_Result=true;
returntrue;
}
inti=0;
stringsql="insertinto"+dt.TableName+"values(";
stringsqlData="",strCmdSql="";
BeginTransaction();
foreach(DataRowrowindt.Rows)
{
sqlData="";
for(i=0;i<dt.Columns.Count;i++)
{
sqlData+="'"+row[i].ToString()+"'";
if(i<dt.Columns.Count-1)
{
sqlData+=",";
}
}
strCmdSql=sql+sqlData+")";
if(!
ExecuteNonQuery(strCmdSql))
{
Rollback();
returnfalse;
}
}
Commit();
m_Result=true;
returntrue;
}
///<summary>
///删除指定表的数据
///</summary>
///<paramname="tableName">表名</param>
///<returns></returns>
publicboolDeleteTableData(stringtableName)
{
m_Result=false;
stringsql="selectcount(*)fromsqlite_masterwheretbl_name='"+tableName+"'andtype='table'";
objectob=ExecuteScalar(sql);
if(!
m_Result)
{
returnfalse;
}
m_Result=false;
if(Convert.ToInt32(ob)==0)
{
m_LastError="被删除数据的表不存在!
";
returnfalse;
}
sql="deletefrom"+tableName;
if(ExecuteNonQuery(sql))
{
m_Result=true;
returntrue;
}
else
{
returnfalse;
}
}
#region事务操作
publicvoidBeginTransaction()
{
transaction=sqConn.BeginTransaction();
}
publicvoidCommit()
{
transaction.Commit();
}
publicvoidRollback()
{
transaction.Rollback();
}
#endregion
}
}