zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Sqlite操作类代码

SQLite代码 操作
2023-06-13 09:14:14 时间
1.ADO.NETProviderForSQLite.
  ADO.NET提供程序是香港(貌似)一个公司提供的.项目地址见:http://sourceforge.net/projects/sqlite-dotnet2
  2.对SQLite.NET的封装,提供一个简单的操作帮助类.
SQLiteHelper
复制代码代码如下:

/**//**
*SQLite操作的帮助类.
*
*Author:egmkang.wang
*Date:2009-06-21
*/
namespaceSystem.Data.SQLite
{
usingSystem.Data;
usingSystem.Data.SQLite;
usingSystem.IO;
publicclassSqliteHelper
{
privatestaticstringpwd="PWD";
privatestaticstringpath=Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)+"\\sqliteTest.db";
privatestaticstringconnString=string.Format("DataSource=\"{0}\"",path,pwd);
/**////<summary>
///返回数据库链接字符串
///</summary>
publicstaticstringConnString
{
get{returnconnString;}
}
/**////<summary>
///执行SQL语句,返回受影响的行数
///</summary>
///<paramname="cmdText">需要被执行的SQL语句</param>
///<returns>受影响的行数</returns>
publicstaticintExecuteNonQuery(stringcmdText)
{
returnExecuteNonQuery(ConnString,cmdText);
}
/**////<summary>
///执行带有事务的SQL语句
///</summary>
///<paramname="trans">事务</param>
///<paramname="cmdText">SQL语句</param>
///<returns>受影响的行数</returns>
publicstaticintExecuteNonQuery(SQLiteTransactiontrans,stringcmdText,paramsSQLiteParameter[]parameters)
{
intval=0;
using(SQLiteCommandcmd=newSQLiteCommand())
{
PrepareCommand(cmd,(SQLiteConnection)trans.Connection,trans,cmdText,parameters);
val=cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
returnval;
}
/**////<summary>
///执行SQL语句,返回受影响的行数
///</summary>
///<paramname="connString">连接字符串</param>
///<paramname="cmdText">SQL语句</param>
///<paramname="parameters">SQL的参数</param>
///<returns>受影响的行数</returns>
publicstaticintExecuteNonQuery(stringconnString,stringcmdText,paramsSQLiteParameter[]parameters)
{
using(SQLiteConnectionconn=newSQLiteConnection(connString))
{
returnExecuteNonQuery(conn,cmdText,parameters);
}
}
/**////<summary>
///执行SQL语句,返回受影响的行数
///</summary>
///<paramname="connection">数据库链接</param>
///<paramname="cmdText">SQL语句</param>
///<paramname="parameters">参数</param>
///<returns>受影响的行数</returns>
publicstaticintExecuteNonQuery(SQLiteConnectionconnection,stringcmdText,paramsSQLiteParameter[]parameters)
{
intval=0;
using(SQLiteCommandcmd=newSQLiteCommand())
{
PrepareCommand(cmd,connection,null,cmdText,parameters);
val=cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
returnval;
}
/**////<summary>
///执行查询,并返回结果集的第一行的第一列.其他所有的行和列被忽略.
///</summary>
///<paramname="cmdText">SQL语句</param>
///<returns>第一行的第一列的值</returns>
publicstaticobjectExecuteScalar(stringcmdText)
{
returnExecuteScalar(ConnString,cmdText);
}
/**////<summary>
///执行查询,并返回结果集的第一行的第一列.其他所有的行和列被忽略.
///</summary>
///<paramname="connString">连接字符串</param>
///<paramname="cmdText">SQL语句</param>
///<returns>第一行的第一列的值</returns>
publicstaticobjectExecuteScalar(stringconnString,stringcmdText)
{
using(SQLiteConnectionconn=newSQLiteConnection(connString))
{
returnExecuteScalar(conn,cmdText);
}
}
/**////<summary>
///执行查询,并返回结果集的第一行的第一列.其他所有的行和列被忽略.
///</summary>
///<paramname="connection">数据库链接</param>
///<paramname="cmdText">SQL语句</param>
///<returns>第一行的第一列的值</returns>
publicstaticobjectExecuteScalar(SQLiteConnectionconnection,stringcmdText)
{
objectval;
using(SQLiteCommandcmd=newSQLiteCommand())
{
PrepareCommand(cmd,connection,null,cmdText);
val=cmd.ExecuteScalar();
}
returnval;
}
/**////<summary>
///执行SQL语句,返回结果集的DataReader
///</summary>
///<paramname="cmdText">SQL语句</param>
///<paramname="parameters">参数</param>
///<returns>结果集的DataReader</returns>
publicstaticSQLiteDataReaderExecuteReader(stringcmdText,paramsSQLiteParameter[]parameters)
{
returnExecuteReader(ConnString,cmdText,parameters);
}
/**////<summary>
///执行SQL语句,返回结果集的DataReader
///</summary>
///<paramname="connString">连接字符串</param>
///<paramname="cmdText">SQL语句</param>
///<paramname="parameters">参数</param>
///<returns>结果集的DataReader</returns>
publicstaticSQLiteDataReaderExecuteReader(stringconnString,stringcmdText,paramsSQLiteParameter[]parameters)
{
SQLiteConnectionconn=newSQLiteConnection(connString);
SQLiteCommandcmd=newSQLiteCommand();
try
{
PrepareCommand(cmd,conn,null,cmdText,parameters);
SQLiteDataReaderrdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
returnrdr;
}
catch
{
conn.Close();
throw;
}
}
/**////<summary>
///预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化
///</summary>
///<paramname="cmd">Command对象</param>
///<paramname="conn">Connection对象</param>
///<paramname="trans">Transcation对象</param>
///<paramname="cmdText">SQLText</param>
///<paramname="parameters">参数实例</param>
privatestaticvoidPrepareCommand(SQLiteCommandcmd,SQLiteConnectionconn,SQLiteTransactiontrans,stringcmdText,paramsSQLiteParameter[]parameters)
{
if(conn.State!=ConnectionState.Open)
conn.Open();
cmd.Connection=conn;
cmd.CommandText=cmdText;
if(trans!=null)
cmd.Transaction=trans;
if(null!=parameters&&parameters.Length>0)
{
cmd.Parameters.AddRange(parameters);
}
}
}
}

  3.增删改查:
复制代码代码如下:

Insert,Delete,Update
conststrings_AddressTreeIntoSQLite="Insertinto[AddressTree]([Id],[ItemType],[ParentId],[Name])values(@Id,@ItemType,@ParentId,@Name);";
SqliteHelper.ExecuteNonQuery(tran,s_AddressTreeIntoSQLite,
//newSQLiteParameter[]here
);
Select
conststrings_AddresTreeFromSqlCE="Select[Id],[ItemType],[ParentId],[Name]From[AddressTree];";
using(SqlCeDataReaderrdr=SqlCeHelper.ExecuteReader(s_AddresTreeFromSqlCE))
{
while(rdr.Read())
{
//ReadDataHere
}
}

  4.其他
  SQLite性能绝对强悍.四表连接查询,查询200次,SQLCE需要44秒(withindex),SQLite只需要3-6秒(withindex).
插入,删除更新性能参见http://www.cnblogs.com/egmkang/archive/2009/06/06/1497678.html
  PS:最近发现执行sql的时候,最好使用单一的长连接,而不是ConnectionString.原因很简单,嵌入式数据库没有连接池技术,
在进行数据库查询中的链接的打开关闭费用相对来说比较高昂.这一点在写程序的时候注意以下.
  还有,有关二进制资源,需要及时释放,例如SqlCommand,这些在写Web程序的时候体验不是很大,毕竟那种环境拥有大量
的内存,GC的效率又是比较高.