在.NET C#中使用sqlite

0 个评论
1。从www.sqlite.org下载SQLite 3.3.4的版本    为了方便,我把它解压了,就一个SQLite3.exe,放入Windows目录下。    Cmd 进入命令行    1)    创建数据库文件:    >SQLite3 d:\test.db 回车    就生成了一个test.db在d盘。    这样同时也SQLite3挂上了这个test.db    2)    用.help可以看看有什么命令    >.help 回车即可    3)可以在这里直接输入SQL语句创建表格 用;结束,然后回车就可以看到了    4)看看有创建了多少表    >.tables    5)看表结构    >.schema 表名    6)看看目前挂的数据库    >.database    7)如果要把查询输出到文件    >.output 文件名    > 查询语句;    查询结果就输出到了文件c:\query.txt    把查询结果用屏幕输出    >.output stdout    8)把表结构输出,同时索引也会输出      .dump 表名    9)退出    >.exit 或者.quit 2。从http://sqlite.phxsoftware.com/下载Ado.net驱动。    下载了安装,在安装目录中存在System.Data.SQLite.dll     我们只需要拷贝这个文件到引用目录,并添加引用即可对SQLite数据库操作了    所有的Ado.net对象都是以SQLite开头的,比如SQLiteConnection    连接串只需要如下方式    Data Source=d:\test.db 或者DataSource=test.db–应用在和应用程序或者.net能够自动找到的目录    剩下的就很简单了~~ 3。SQL语法    由于以前用SQLServer或者ISeries,所以DDL的语法很汗颜    1)创建一个单个Primary Key的table    CREATE TABLE [Admin] ( [UserName] [nvarchar] (20)   PRIMARY KEY NOT NULL , [Password] [nvarchar] (50)   NOT NULL , [Rank] [smallint] NOT NULL , [MailServer] [nvarchar] (50)   NOT NULL , [MailUser] [nvarchar] (50)   NOT NULL , [MailPassword] [nvarchar] (50)   NOT NULL , [Mail] [nvarchar] (50)   NOT NULL    ) ; CREATE TABLE [ESOA_User] (     [UID] [integer] PRIMARY KEY NOT NULL ,     [U_Account] [varchar] (50) NOT NULL ,     [U_Password] [varchar] (50) NOT NULL ,     [U_UserName] [varchar] (50) NOT NULL ,     [U_Company] [varchar] (100) NULL ,     [U_DepartmentID] [integer] NOT NULL ,     [U_Tel] [varchar] (50) NULL ,     [U_QQ] [varchar] (50) NULL ,     [U_Address] [varchar] (100) NULL ,     [U_Post] [varchar] (10) NULL ,     [U_UserGroup] [integer] NOT NULL ,     [U_Power] [varchar] (50) NULL ,     [U_Lock] [tinyint] NOT NULL ,     [U_Memo] NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO    2)创建一个多个Primary Key的table    CREATE TABLE [CodeDetail] ( [CdType] [nvarchar] (10) NOT NULL , [CdCode] [nvarchar] (20) NOT NULL , [CdString1] [ntext]   NOT NULL , [CdString2] [ntext]   NOT NULL , [CdString3] [ntext]   NOT NULL, PRIMARY KEY (CdType,CdCode)              ) ;    3)创建索引    CREATE INDEX [IX_Account] ON [Account]([IsCheck], [UserName]);        还可以视图等等。 4.还有很有用的SQL Select * from Sqlite_master Select datetime('now') Select date('now') Select time('now') 以及很多函数,具体可以参考SQLite的wiki. oh,还有就是看到有人说,好像成批插入的时候,启动事务,比不启动事务快n倍 还有就是尽量使用参数化的SQL,估计和商用DB一样能够自动Prepare. =========== sqlite可以在shell/dos command底下直接执行命令: sqlite3 film.db "select * from film;" 输出 HTML 表格: sqlite3 -html film.db "select * from film;" 将数据库「倒出来」: sqlite3 film.db ".dump" > output.sql 利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了): sqlite3 film.db < output.sql 在大量插入资料时,你可能会需要先打这个指令: begin; 插入完资料后要记得打这个指令,资料才会写进数据库中: commit; ; ———————————— System.Data.Sqlite入手。。。 首先import/using: 代码 using System.Data.SQLite;    Connection和Command: 代码 private SQLiteConnection conn;                        private SQLiteCommand cmd;    连接db: 代码 conn = new SQLiteConnection("Data Source=c:\\test.db");                     conn.Open();    INSERT/UPDATE: 代码 cmd = conn.CreateCommand();    cmd.CommandText = "INSERT INTO user(email,name) VALUES ('email','name')";    cmd.ExecuteNonQuery();        cmd.CommandText = "UPDATE userSET name = 'Codelicious' WHERE ID = 1";    cmd.ExecuteNonQuery();    SELECT: 代码 cmd.CommandText = "SELECT ID, name FROM user";    SQLiteDataReader reader = cmd.ExecuteReader();    if (reader.HasRows)                 {                    while (reader.Read())                     {                         Console.WriteLine("ID: " + reader.GetInt16(0));                         Console.WriteLine("name: " + reader.GetString(1));                     }                 }    — sqlite是最近比较火的一个小型embeddable RDBMS。 用C实现的,开源,memory footprint非常小,而且对不同的语言有很多wrapper支持。 在.NET中使用sqlite,其实很简单,主要是找个.NET的wrapper。看了几个,最终选了phpguru的SQLite.NET 把sqlite.dll和SQLiteClient.dll放在.NET的current path下面,在项目的references中添加SQLiteClient.dll 程序中引用 c# 代码   using SQLite.NET;   使用方法,打开db: c# 代码   try                {                    Console.WriteLine("opening db…");                    // Open database                    SQLiteClient db = new SQLiteClient("c:\test.db");                    }                catch (SQLiteException e)                {                    Console.WriteLine("Fatal error: {0}", e.Message);                    return;                }   select应用: c# 代码   ArrayList tables = db.GetColumn("SELECT name FROM sqlite_master WHERE type = 'table'");                    foreach (string tableName in tables)                {                    Console.WriteLine("\t" + tableName);                }   其他update,insert,delete都支持得不错。 sqlite小巧玲珑,用起来十分方便。 Google Gears和Adobe AIR都在使用sqlite,看来必有其过人之处。。。 — SQLite 作为一个轻量级嵌入式数据库,还是非常好用的。雨痕极力推荐~~~~~~   今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟! 下面是他发给我的测试代码。我晕~~~~~~   using System.Data; using System.Data.Common; using System.Data.SQLite; // 创建数据库文件 File.Delete("test1.db3"); SQLiteConnection.CreateFile("test1.db3"); DbProviderFactory factory = SQLiteFactory.Instance; using (DbConnection conn = factory.CreateConnection()) {   // 连接数据库   conn.ConnectionString = "Data Source=test1.db3";   conn.Open();   // 创建数据表   string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";   DbCommand cmd = conn.CreateCommand();   cmd.Connection = conn;   cmd.CommandText = sql;   cmd.ExecuteNonQuery();   // 添加参数   cmd.Parameters.Add(cmd.CreateParameter());     // 开始计时   Stopwatch watch = new Stopwatch();   watch.Start();     // 连续插入1000条记录   for (int i = 0; i < 1000; i++)   {     cmd.CommandText = "insert into [test1] ([s]) values (?)";     cmd.Parameters[0].Value = i.ToString();     cmd.ExecuteNonQuery();   }   // 停止计时   watch.Stop();   Console.WriteLine(watch.Elapsed); } 哎~~~~ 一个常识性的错误,我加几行代码 (新增代码标记 "// <——————-")。 using System.Data; using System.Data.Common; using System.Data.SQLite; // 创建数据库文件 File.Delete("test1.db3"); SQLiteConnection.CreateFile("test1.db3"); DbProviderFactory factory = SQLiteFactory.Instance; using (DbConnection conn = factory.CreateConnection()) {   // 连接数据库   conn.ConnectionString = "Data Source=test1.db3";   conn.Open();   // 创建数据表   string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";   DbCommand cmd = conn.CreateCommand();   cmd.Connection = conn;   cmd.CommandText = sql;   cmd.ExecuteNonQuery();   // 添加参数   cmd.Parameters.Add(cmd.CreateParameter());     // 开始计时   Stopwatch watch = new Stopwatch();   watch.Start();     DbTransaction trans = conn.BeginTransaction(); // <——————-   try   {     // 连续插入1000条记录     for (int i = 0; i < 1000; i++)     {       cmd.CommandText = "insert into [test1] ([s]) values (?)";       cmd.Parameters[0].Value = i.ToString();       cmd.ExecuteNonQuery();     }     trans.Commit(); // <——————-   }   catch   {     trans.Rollback(); // <——————-     throw; // <——————-   }   // 停止计时   watch.Stop();   Console.WriteLine(watch.Elapsed); } 执行一下,耗时 0.2 秒。这差距是不是太大了点?   为什么只是简单启用了一个事务会有这么大的差距呢? 很简单,SQLite 缺省为每个操作启动一个事务,那么原代码 1000 次插入起码开启了 1000 个事务,"事务开启 + SQL 执行 + 事务关闭" 自然耗费了大量的时间, 这也是后面显示启动事务后为什么如此快的原因。其实这是数据库操作的基本常识,大家要紧记,不好的代码效率差的不是一点半点。
2012-07-21 / C# / 13,180 views浏览
阅读全文

解决WordPress 3.4.1后台无法显示、安装或更换新主题

0 个评论
相信不少朋友升级或者安装了WordPress 3.4 版本以上会 发现运行Wordpress的时候, 登入后台想更换新的主题时候, 居然无法显示主题, 后台只显示: You only have one theme installed right now. Live a little! You can choose from over 1,000 free themes in the WordPress.org Theme Directory at any time: just click on the Install Themes tab above. 截图: 于是在百度上面搜索了相关问题的解决方法, 发现找不到相关的解决方案, 只能跑去谷歌上面搜索英文相关问题解决方案.但 是找了两天时间, 今天无意间把上面的”You Onlu have one theme installed right now.”放在谷歌里面搜索了一下, 终于找 到了答案. 答案是在服务器或者VPS上面的”php.ini”里面的函数中的disable_funcions = 后面的"scandir"去掉就行了. 在LNMP的环境下: 运行命令: vi /usr/local/php/etc/php.ini 搜索 “scandir” 然后将这个删除掉,顺便把”逗号”也删除了,然后保存退出 最后重启LNMP: /root/lnmp restart 这样就可以显示了.
2012-07-14 / wordpress / 263,023 views浏览
阅读全文

dede免登陆恢复数据又找不到了,不知道自己保存在哪了,只好又现做了一个

0 个评论
其实很简单的 涉及到还原的其实就3个文件 config.php sys_data_done.php sys_data_revert.php 我把他们都复制了,重命名以别的名字开头,比如变成 xh_config.php  xh_sys_data_done.php xh_sys_data_revert.php 然后打开 xh_config.php去掉验证 大概34行后面变成 //检验用户登录状态 /* $cuserLogin = new userLogin(); if($cuserLogin->getUserID()==-1) { header(“location:login.php?gotopage=”.urlencode($dedeNowurl)); exit(); } if($cfg_dede_log==’Y’) { */ $s_nologfile = ‘_main|_list’; $s_needlogfile = ‘sys_|file_’; $s_method = isset($_SERVER[‘REQUEST_METHOD’]) ? $_SERVER[‘REQUEST_METHOD’] : ”; $s_query = isset($dedeNowurls[1]) ? $dedeNowurls[1] : ”; $s_scriptNames = explode(‘/’, $s_scriptName); $s_scriptNames = $s_scriptNames[count($s_scriptNames)-1]; $s_userip = GetIP(); /*     if( $s_method==’POST’ || (!preg_match(“#”.$s_nologfile.”#i”, $s_scriptNames) && $s_query!=”) || preg_match(“#”.$s_needlogfile.”#i”,$s_scriptNames) ) { $inquery = “INSERT INTO `#@__log`(adminid,filename,method,query,cip,dtime) VALUES (‘”.$cuserLogin->getUserID().”‘,'{$s_scriptNames}’,'{$s_method}’,'”.addslashes($s_query).”‘,'{$s_userip}’,'”.time().”‘);”; $dsql->ExecuteNoneQuery($inquery); } } */   然后修改 xh_sys_data_done.php 把13行的引用改成我们新弄成的 require_once(dirname(__FILE__).’/xh_config.php’); 然后把后面的权限检查去掉 //CheckPurview(‘sys_Data’); 再替换一下文件名 把sys_data_done.php全替换成xh_sys_data_done.php   继续修改xh_sys_data_revert.php 前面是一样的 把13行的引用改成我们新弄成的 require_once(dirname(__FILE__).’/xh_config.php’); 然后把后面的权限检查去掉 //CheckPurview(‘sys_Data’); 然后我把这行引用给去掉 //include DedeInclude(‘templets/sys_data_revert.htm’); 后面加个?>结束PHP 然后打开templets\sys_data_revert.htm吧里面内容全复制到xh_sys_data_revert.php的刚才弄的?>后面 修改其中一个sys_data_done.php为xh_sys_data_done.php 就OK了   使用方法: 直接访问后台/xh_sys_data_revert.php开始还原吧
2012-06-22 / dedecms / 3,947 views浏览
阅读全文

wordpress的主题真的不能再用第三方的了,我的站又被挂马了

0 个评论
奶奶的,前些日子才给两个站换的新主题,今天上去一看,统计里怎么PV为0呢? 然后翻墙看了一下,两个站都被挂马了,挂到竟然不能访问,说是什么缺少大括号 一看主题的index.php上面一串乱码 再仔细看看根目录的index.php还是一样上面有加密的乱码 然后我把乱码全删除了,浏览我的站,结果还是不能显示 看来不知道是哪个文件被修改了,手工查询太费时间了 干脆用本地的文件覆盖算了,登陆本地程序后台一看,竟然有新版本的WP,不会是发现漏洞才升级的吧 但是我用其他主题的站却没事,估计还是刚换上的主题的问题,看来以后我只能自己修改官方主题来用了 难看是难看,相对安全一点吧~  
2012-06-21 / wordpress / 4,433 views浏览
阅读全文

支付宝还弄了这么个东西出来

0 个评论
https://me.alipay.com/lcxde   哈哈~其实也挺不错的 直接叫对方填一下就可以收款了~ 以后卖模板方便了
2012-06-13 / 生活 / 4,166 views浏览
阅读全文

憋了一星期,终于把申请书写好了

0 个评论
查资料花了好几天 然后想新主题又花了一点时间 最后动手写,才发现自己脑子里还是一片空荡荡的,所有资料在脑子里乱成一锅粥 然后就一直处于抓破头皮写不出几个字的状态 拖拖拉拉写了3天,明天就要交了,那个急啊 实在想不出怎么写了,上网搜索了一下,发现还是有蛮多例子的 有了例子就好办多了 COPY过去,然后开始缝缝补补 到现在终于完工了 TNND,真是伤神啊 看来以后写文章还是先得找到范文,闭门造车真的太难弄了
2012-06-10 / 生活 / 4,009 views浏览
阅读全文

奶奶的,我的破助力车又被偷了,治安怎么那么差

0 个评论
以前老婆买那辆3K块不到半年就被偷了 于是买了个破车,以为不会有贼会看上 没想到最终还是给偷了 感觉这个贼真的有点饥不择食了 对面楼那里前几天晚上7点钟左右也是有贼入室偷东西 当时主人还刚好在楼下带小孩玩耍 他的家人,貌似是他母亲,可能是发现家里被翻乱了,就到窗口和他对话,可能是叫他报警 10来分钟后警察到了,估计贼还没跑远,就对整栋楼进行搜索 结果上上下下,里里外外搜索了2个小时,却是一无所获,现在的LJ警察真多 明明屋主说堵住了,贼不可能跑下楼 可警察还是没找到 才没过几天,我的助力车就被偷了 尤其诧异的是,我早上去上班,发现出门不远的路上空荡荡啥都没有 中午回来发现路中间多了一辆助力车,感觉有点像我楼下的车 仔细一看,车头的锁完全被撬碎了 估计贼没启动得了,就丢那了 非常奇怪的是我上午出去时没看见,怎么到中午才发现 难道那些贼是隔壁家的,晚上偷车以后转移到隔壁家,然后早上才开走 不管怎么样,这些只是我的猜测而已 那么LJ的警察,要他们帮找会车是绝无半点希望的事情,干脆就放弃了 重新买一辆算了 本来已经够钱买相机的,看来只能无限期延长了
2012-06-10 / 生活 / 3,943 views浏览
阅读全文

据说要解散的SND48的MV,波涛汹涌啊

0 个评论
歌曲还行
2012-05-27 / 生活 / 5,367 views浏览
阅读全文

哈哈,继续完善了一下火车头编辑器

0 个评论
其实就是个数据库编辑工具,不过这个功能火车头竟然要收费 对于一向铁公鸡的我来说还不如自己做一个 前面用DELPHI做那个貌似出问题了~ 前段时间用C#做了一个,感觉也不是很难 今天晚上完善了一下,左边加入了任务选择,双击就可以打开任务,进行数据编辑了 这下方便多了,不用去选文件夹了,那些文件夹都是以任务ID命名的,每次选文件夹都得到火车头里面看ID 确实比较麻烦~ 今晚花了点时间解决了这个问题 至于分组,懒得弄了~能用就先用着了,以后心情好了再说    
2012-05-20 / C# / 4,683 views浏览
阅读全文

极为怀疑NewWpThemes出的模板有漏洞

0 个评论
WP的程序已经是最行版本的了,其他站用的不是NewWpThemes出的模板,一直都平安无事 只有用了NewWpThemes的几个英文站老是被挂马,上次我没升级程序,被挂了一次 但是我已经有些怀疑不是WP程序本身的问题,而是使用的那个站点烂模板的问题 这次再次被证实了,其他站都好好的,就是用了那个破站出的模板的被挂了 虽然那些模板被我修改得非常好了,现在不得不狠心删除它们 换成官方的把,省心啊
2012-05-19 / wordpress / 4,367 views浏览
阅读全文