rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 数据库 » SQLite

C# 连接SQLite做了一个每天定时关闭网络连接的服务

      最近做了一个每天在规定的时间短开网络连接的windows服务。

首先用SQLite做了两个表一个是netconnection填写网络连接的信息(我是单独拉的联通2M带宽,adsl上网)。一个netweek存放平时和周末两种情况下断网的时间。

首先写了一个封装SQLite操作的简单类(参考网络上的内容):

       using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SQLite; namespace autonet     class Db         SQLiteConnection conn ;
        SQLiteCommand com;
        public Db(string strConn)             conn = new SQLiteConnection("Data Source=" + strConn);
            com = conn.CreateCommand();
            conn.Open();         public void Open()             if (conn.State != ConnectionState.Open)
                conn.Open();
        }         public void Close()             if (conn.State != ConnectionState.Closed)
                conn.Close();
        }         public void DoNoneSQL(string strnonesql)             com.CommandText = strnonesql;
            com.ExecuteNonQuery();         public int DoIntSQL(string strdointsql)             int t;
            com.CommandText = strdointsql;
            t= com.ExecuteNonQuery();
            return t;         public void DoNoneSQL(string strnonesql, SQLiteParameter[] pars)             ParamentsCommand(strnonesql, pars);
            DoNoneSQL(strnonesql);         public SQLiteDataReader DoDataReader(string strdatareadersql)             com.CommandText = strdatareadersql;
            return com.ExecuteReader();         public SQLiteDataReader DoDataReader(string strdatareadersql, SQLiteParameter[] pars)             ParamentsCommand(strdatareadersql, pars);
            return DoDataReader(strdatareadersql);         public DataTable DoDataTable(string strdatatablesql)             com.CommandText = strdatatablesql;
            SQLiteDataAdapter sda = new SQLiteDataAdapter(com);
            DataTable db = new DataTable();
            sda.Fill(db);
            return db;         public DataTable DoDataTable(string strdatatablesql, SQLiteParameter[] pars)             ParamentsCommand(strdatatablesql, pars);
            return DoDataTable(strdatatablesql);         public void BeginTrans()             conn.BeginTransaction();         public void Commit()             conn.BeginTransaction().Commit();         public void ParamentsCommand(string strcontext, SQLiteParameter[] compars)             com.CommandText = strcontext;
            if (compars != null)                 foreach (SQLiteParameter par in compars)                     if (par.Value == null)
                        par.Value = DBNull.Value;
                    com.Parameters.Add(par);             }         public SQLiteParameter MakeSQLiteParameter(string name, DbType type, object value)             SQLiteParameter par = new SQLiteParameter(name,type);
            par.Value = value;
            return par;     } }

   然后封装简单的连接拨号和断开拨号程序:

using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices; namespace autonet     class modemnet         private static Mutex mutex = new Mutex();
        private Process pro = new Process();
        private int Desc;
        private int connectcount;//连接次数0表示断开1表示连接
        private int disconnectcount;//断开次数0表示连接1表示断开
        private bool status;//true:connected false:not connected
        private string connname;//连接名字
        private string connusername;//连接帐号用户
        private string connpwd;//连接密码
        [DllImport("wininet.dll")]
        private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
        public string NetName             set { this.connname = value; }         public string UserName             set { this.connusername = value; }         public string Pwd             set { this.connpwd = value; }         public int ConnectNum             get{ return connectcount;}         public int DisConnectNum             get { return disconnectcount; }         private bool isconnecting()             status = InternetGetConnectedState(out Desc, 0);
            return status;         private bool isactive(string strProName)             Process[] ps = Process.GetProcessesByName(strProName);                 if (ps.Length > 0)
                    return true;
                else
                    return false;         }         public void StopConn()             if (isconnecting())                 lock (pro)                     if (!isactive("rasdial"))                         mutex.WaitOne();
                        //pro.StartInfo.FileName = "rundll32.exe";
                        //pro.StartInfo.Arguments = "iedkcs32.dll CloseRASConnections";
                        pro.StartInfo.FileName = "rasdial.exe";
                        pro.StartInfo.Arguments = this.connname + @" /DISCONNECT";
                        pro.Start();
                        mutex.ReleaseMutex();
                        disconnectcount++;
                        connectcount--;                 }
                pro.Close();         }
        public void startconn()             if (!isconnecting())                 lock (pro)                     if (!isactive("rasdial"))                         mutex.WaitOne();
                        pro.StartInfo.FileName = "rasdial.exe";
                        pro.StartInfo.Arguments = this.connname + " " + this.connusername + " " + this.connpwd;
                        pro.Start();
                        mutex.ReleaseMutex();
                        connectcount++;
                        disconnectcount--;                 }
                pro.Close();         } }
        后面就是简单的调用了,就是 0.开始先连接网络,然后 1.检查是否需要执行该功能(在netconnection中有字段表示) 2.是否到达配置的断网时间 3.1和2都

true,执行断网,否则连接网络

在过程中对SQLite里面执行update语句让我检查了好久,首先是DB文件找错了,执行后检查都结果总是不对,后来发现这个问题后执行update还是不对。愁。 原来是在一个连接下事务不能嵌套。

拨号程式的名字如果带空格就要用双引号引起来执行命令

windows服务中若用timer控件是System.Timers 下的timer.

  

顶一下
(0)
踩一下
(0)