当前位置: 移动技术网 > IT编程>数据库>SQLLite > Sqlite 操作类代码

Sqlite 操作类代码

2017年12月08日  | 移动技术网IT编程  | 我要评论
1. ado.net provider for sqlite.
  ado.net 提供程序是香港(貌似)一个公司提供的.项目地址见:http://sourceforge.net/projects/sqlite-dotnet2
  2. 对sqlite.net的封装,提供一个简单的操作帮助类.
sqlitehelper
复制代码 代码如下:

/**//**
* sqlite操作的帮助类.
*
* author: egmkang.wang
* date: 2009-06-21
*/
namespace system.data.sqlite
{
using system.data;
using system.data.sqlite;
using system.io;
public class sqlitehelper
{
private static string pwd = "pwd";
private static string path = path.getdirectoryname(system.reflection.assembly.getexecutingassembly().getname().codebase) + "\\sqlitetest.db";
private static string connstring = string.format("data source =\"{0}\"", path, pwd);
/**//// <summary>
/// 返回数据库链接字符串
/// </summary>
public static string connstring
{
get { return connstring; }
}
/**//// <summary>
/// 执行sql语句,返回受影响的行数
/// </summary>
/// <param name="cmdtext">需要被执行的sql语句</param>
/// <returns>受影响的行数</returns>
public static int executenonquery(string cmdtext)
{
return executenonquery(connstring, cmdtext);
}
/**//// <summary>
/// 执行带有事务的sql语句
/// </summary>
/// <param name="trans">事务</param>
/// <param name="cmdtext">sql语句</param>
/// <returns>受影响的行数</returns>
public static int executenonquery(sqlitetransaction trans, string cmdtext, params sqliteparameter[] parameters)
{
int val = 0;
using (sqlitecommand cmd = new sqlitecommand())
{
preparecommand(cmd, (sqliteconnection)trans.connection, trans, cmdtext, parameters);
val = cmd.executenonquery();
cmd.parameters.clear();
}
return val;
}
/**//// <summary>
/// 执行sql语句,返回受影响的行数
/// </summary>
/// <param name="connstring">连接字符串</param>
/// <param name="cmdtext">sql语句</param>
/// <param name="parameters">sql的参数</param>
/// <returns>受影响的行数</returns>
public static int executenonquery(string connstring, string cmdtext, params sqliteparameter[] parameters)
{
using (sqliteconnection conn = new sqliteconnection(connstring))
{
return executenonquery(conn, cmdtext, parameters);
}
}
/**//// <summary>
/// 执行sql语句,返回受影响的行数
/// </summary>
/// <param name="connection">数据库链接</param>
/// <param name="cmdtext">sql语句</param>
/// <param name="parameters">参数</param>
/// <returns>受影响的行数</returns>
public static int executenonquery(sqliteconnection connection, string cmdtext, params sqliteparameter[] parameters)
{
int val = 0;
using (sqlitecommand cmd = new sqlitecommand())
{
preparecommand(cmd, connection, null, cmdtext, parameters);
val = cmd.executenonquery();
cmd.parameters.clear();
}
return val;
}
/**//// <summary>
/// 执行查询,并返回结果集的第一行的第一列.其他所有的行和列被忽略.
/// </summary>
/// <param name="cmdtext">sql 语句</param>
/// <returns>第一行的第一列的值</returns>
public static object executescalar(string cmdtext)
{
return executescalar(connstring, cmdtext);
}
/**//// <summary>
/// 执行查询,并返回结果集的第一行的第一列.其他所有的行和列被忽略.
/// </summary>
/// <param name="connstring">连接字符串</param>
/// <param name="cmdtext">sql 语句</param>
/// <returns>第一行的第一列的值</returns>
public static object executescalar(string connstring, string cmdtext)
{
using (sqliteconnection conn = new sqliteconnection(connstring))
{
return executescalar(conn, cmdtext);
}
}
/**//// <summary>
/// 执行查询,并返回结果集的第一行的第一列.其他所有的行和列被忽略.
/// </summary>
/// <param name="connection">数据库链接</param>
/// <param name="cmdtext">sql 语句</param>
/// <returns>第一行的第一列的值</returns>
public static object executescalar(sqliteconnection connection, string cmdtext)
{
object val;
using (sqlitecommand cmd = new sqlitecommand())
{
preparecommand(cmd, connection, null, cmdtext);
val = cmd.executescalar();
}
return val;
}
/**//// <summary>
/// 执行sql语句,返回结果集的datareader
/// </summary>
/// <param name="cmdtext">sql语句</param>
/// <param name="parameters">参数</param>
/// <returns>结果集的datareader</returns>
public static sqlitedatareader executereader(string cmdtext, params sqliteparameter[] parameters)
{
return executereader(connstring, cmdtext, parameters);
}
/**//// <summary>
/// 执行sql语句,返回结果集的datareader
/// </summary>
/// <param name="connstring">连接字符串</param>
/// <param name="cmdtext">sql语句</param>
/// <param name="parameters">参数</param>
/// <returns>结果集的datareader</returns>
public static sqlitedatareader executereader(string connstring, string cmdtext, params sqliteparameter[] parameters)
{
sqliteconnection conn = new sqliteconnection(connstring);
sqlitecommand cmd = new sqlitecommand();
try
{
preparecommand(cmd, conn, null, cmdtext, parameters);
sqlitedatareader rdr = cmd.executereader(commandbehavior.closeconnection);
cmd.parameters.clear();
return rdr;
}
catch
{
conn.close();
throw;
}
}
/**//// <summary>
/// 预处理command对象,数据库链接,事务,需要执行的对象,参数等的初始化
/// </summary>
/// <param name="cmd">command对象</param>
/// <param name="conn">connection对象</param>
/// <param name="trans">transcation对象</param>
/// <param name="cmdtext">sql text</param>
/// <param name="parameters">参数实例</param>
private static void preparecommand(sqlitecommand cmd, sqliteconnection conn, sqlitetransaction trans, string cmdtext, params sqliteparameter[] 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
const string s_addresstreeintosqlite = "insert into [addresstree] ([id],[itemtype],[parentid],[name]) values (@id,@itemtype,@parentid,@name);";
sqlitehelper.executenonquery(tran, s_addresstreeintosqlite,
//new sqliteparameter[] here
);
select
const string s_addrestreefromsqlce = "select [id],[itemtype],[parentid],[name] from [addresstree];";
using (sqlcedatareader rdr = sqlcehelper.executereader(s_addrestreefromsqlce ))
{
while (rdr.read())
{
//read data here
}
}

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网