using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 简单的学籍管理系统.App_Code
{
public class SqLiteManager//数据库管理类
{
private SqLiteManager()
{
CreateDataBase();
}
private static SqLiteManager instance;
private SQLiteConnection m_dbConnection;
public static SqLiteManager GetInstance
{
get
{
if (instance == null)
{
instance = new SqLiteManager();
}
return instance;
}
}
private void CreateTable(string tableName, List<KeyValuePair<string, Type>> members)
{
ConnectToDataBase();
string sql = "create table " + tableName + " ";
sql += "(";
for (int i = 0; i < members.Count; i++)
{
sql += members[i].Key + " ";
if (members[i].Value == typeof(string))
{
sql += "VARCHAR(200)";
}
else if (members[i].Value == typeof(int))
{
sql += "INTERGER";
}
else if (members[i].Value == typeof(long))
{
sql += "BIGINT";
}
else if (members[i].Value == typeof(decimal))
{
sql += "DECIMAL";
}
else if (members[i].Value == typeof(DateTime))
{
sql += "DATETIME";
}
else
{
sql += "VARVHAR(200)";
}
if (i + 1 != members.Count)
sql += " ,";
}
sql += ")";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
CloseDataBase();
}
private void FillTabel(string tableName, List<KeyValuePair<string, object>> members)
{
ConnectToDataBase();
string sql = "insert into " + tableName + " (";
string values = "values (";
for (int i = 0; i < members.Count; i++)
{
sql += members[i].Key;
Type type = members[i].Value.GetType();
if (type == typeof(string))
{
values += "'" + members[i].Value + "'";
}
else if (type == typeof(int))
{
values += (int)members[i].Value;
}
else if (type == typeof(long))
{
values += (long)members[i].Value;
}
else if (type == typeof(decimal))
{
values += (decimal)members[i].Value;
}
else if (type == typeof(DateTime))
{
values += "'" + ((DateTime)members[i].Value).ToString("yyyy-MM-dd") + "'";
}
else
{
values += "'" + members[i].Value + "'";
}
if (i + 1 != members.Count)
{
sql += " ,";
values += " ,";
}
}
values += ")";
sql += ") ";
sql += values;
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
CloseDataBase();
}
private void DelTabel(string tableName, List<KeyValuePair<string, object>> members)
{
ConnectToDataBase();
string sql = "delete from " + tableName + " where";
string values = "(";
for (int i = 0; i < members.Count; i++)
{
Type type = members[i].Value.GetType();
if (type == typeof(string))
{
values += members[i].Key + "=" + "'" + members[i].Value + "'";
}
else if (type == typeof(int))
{
values += members[i].Key + "=" + (int)members[i].Value;
}
else if (type == typeof(long))
{
values += members[i].Key + "=" + (long)members[i].Value;
}
else if (type == typeof(decimal))
{
values += members[i].Key + "=" + (decimal)members[i].Value;
}
else if (type == typeof(DateTime))
{
values += members[i].Key + "=" + "'" + ((DateTime)members[i].Value).ToString("yyyy-MM-dd") + "'";
}
else
{
values += members[i].Key + "=" + "'" + members[i].Value + "'";
}
if (i + 1 != members.Count)
{
values += " and";
}
}
values += ")";
sql += values;
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
CloseDataBase();
}
private void UpdateTabel(string tableName, List<KeyValuePair<string, object>> members, string key, object value)
{
ConnectToDataBase();
string sql = "update " + tableName + " set";
string values = "(";
for (int i = 0; i < members.Count; i++)
{
Type type = members[i].Value.GetType();
if (type == typeof(string))
{
values += members[i].Key + "=" + "'" + members[i].Value + "'";
}
else if (type == typeof(int))
{
values += members[i].Key + "=" + (int)members[i].Value;
}
else if (type == typeof(long))
{
values += members[i].Key + "=" + (long)members[i].Value;
}
else if (type == typeof(decimal))
{
values += members[i].Key + "=" + (decimal)members[i].Value;
}
else if (type == typeof(DateTime))
{
values += members[i].Key + "=" + "'" + ((DateTime)members[i].Value).ToString("yyyy-MM-dd") + "'";
}
else
{
values += members[i].Key + "=" + "'" + members[i].Value + "'";
}
if (i + 1 != members.Count)
{
values += " and";
}
}
values += ")";
sql += values;
if (!string.IsNullOrEmpty(key))
{
string valuestr = "";
if (value.GetType() == typeof(string))
{
valuestr = "'" + value.ToString() + "'";
}
else if (value.GetType() == typeof(int))
{
valuestr = value.ToString();
}
else if (value.GetType() == typeof(long))
{
valuestr = value.ToString();
}
else if (value.GetType() == typeof(decimal))
{
valuestr = value.ToString();
}
else if (value.GetType() == typeof(DateTime))
{
valuestr = "'" + ((DateTime)value).ToString("yyyy-MM-dd") + "'";
}
else
{
valuestr = "'" + value.ToString() + "'";
}
sql += "where " + key + "=" + valuestr;
}
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
CloseDataBase();
}
private void CreateDataBase()
{
try
{
ConnectToDataBase();
CloseDataBase();
}
catch
{
SQLiteConnection.CreateFile("MyDatabase.sqlite");
}
}
private void ConnectToDataBase()
{
if (m_dbConnection == null)
m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
m_dbConnection.Open();
}
private void CloseDataBase()
{
if (m_dbConnection == null)
m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
m_dbConnection.Close();
}
public void createAllTables()
{
/*创建用户表*/
List<KeyValuePair<string, Type>> members = new List<KeyValuePair<string, Type>>();
members.Add(new KeyValuePair<string, Type>("UserName", typeof(string)));
members.Add(new KeyValuePair<string, Type>("PassWord", typeof(string)));
members.Add(new KeyValuePair<string, Type>("NickName", typeof(string)));
members.Add(new KeyValuePair<string, Type>("Sex", typeof(int)));
members.Add(new KeyValuePair<string, Type>("Birthday", typeof(DateTime)));
members.Add(new KeyValuePair<string, Type>("Nation", typeof(string)));
members.Add(new KeyValuePair<string, Type>("Area", typeof(string)));
CreateTable("Users", members);
/*创建民族表*/
members.Clear();
members.Add(new KeyValuePair<string, Type>("NationCode", typeof(string)));
members.Add(new KeyValuePair<string, Type>("NationName", typeof(string)));
CreateTable("Nation", members);
/*创建区域表*/
members.Clear();
members.Add(new KeyValuePair<string, Type>("AreaCode", typeof(string)));
members.Add(new KeyValuePair<string, Type>("AreaName", typeof(string)));
members.Add(new KeyValuePair<string, Type>("ParentAreaCode", typeof(string)));
CreateTable("Chinastates", members);
/*创建uspd表*/
members.Clear();
members.Add(new KeyValuePair<string, Type>("Name", typeof(string)));
members.Add(new KeyValuePair<string, Type>("Pwd", typeof(string)));
members.Add(new KeyValuePair<string, Type>("Lastlogon", typeof(int)));
CreateTable("uspd", members);
/*创建jl表*/
members.Clear();
members.Add(new KeyValuePair<string, Type>("Jmima", typeof(int)));
members.Add(new KeyValuePair<string, Type>("Jdenglu", typeof(int)));
CreateTable("jl", members);
}
public List<object> SelectAllData(Type type)
{
List<object> resultList = new List<object>();
string sql = "select *from ";
if (type == typeof(Users))
{
ConnectToDataBase();
sql += "Users";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
var dr = command.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Users u = new Users()
{
UserName = dr["UserName"].ToString(),
PassWord = dr["PassWord"].ToString(),
NickName = dr["NickName"].ToString(),
Sex = Convert.ToBoolean(dr["Sex"]),
Birthday = Convert.ToDateTime(dr["Birthday"].ToString()),
Nation = dr["Nation"].ToString(),
Area = dr["Area"].ToString()
};
resultList.Add(u);
}
}
CloseDataBase();
}
else if (type == typeof(Nation))
{
ConnectToDataBase();
sql += "Nation";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
var dr = command.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Nation n = new Nation()
{
NationCode = dr[0].ToString(),
NationName = dr[1].ToString()
};
resultList.Add(n);
}
}
CloseDataBase();
}
else if (type == typeof(Chinastates))
{
ConnectToDataBase();
sql += "Chinastates";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
var dr = command.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Chinastates c = new Chinastates()
{
AreaCode = dr[0].ToString(),
AreaName = dr[1].ToString(),
ParentAreaCode = dr[2].ToString()
};
resultList.Add(c);
}
}
CloseDataBase();
}
else if (type == typeof(uspd))
{
ConnectToDataBase();
sql += "uspd";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
var dr = command.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
uspd u = new uspd()
{
Name = dr[0].ToString(),
Pwd = dr[1].ToString(),
Lastlogon = int.Parse(dr[2].ToString()),
};
resultList.Add(u);
}
}
CloseDataBase();
}
else if (type == typeof(jl))
{
ConnectToDataBase();
sql += "jl";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
var dr = command.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
jl u = new jl
{
Jmima = (int)dr[0] == 1 ? true : false,
Jdenglu = (int)dr[0] == 1 ? true : false
};
resultList.Add(u);
}
}
CloseDataBase();
}
return resultList;
}
public bool AddData(Type type, object data)
{
bool ok = false;
List<KeyValuePair<string, object>> members = new List<KeyValuePair<string, object>>();
try
{
if (type == typeof(Users))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("UserName", ((Users)data).UserName));
members.Add(new KeyValuePair<string, object>("PassWord", ((Users)data).PassWord));
members.Add(new KeyValuePair<string, object>("NickName", ((Users)data).NickName));
members.Add(new KeyValuePair<string, object>("Sex", ((Users)data).Sex));
members.Add(new KeyValuePair<string, object>("Birthday", ((Users)data).Birthday));
members.Add(new KeyValuePair<string, object>("Nation", ((Users)data).Nation));
members.Add(new KeyValuePair<string, object>("Area", ((Users)data).Area));
FillTabel("Users", members);
}
else if (type == typeof(Nation))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("NationCode", ((Nation)data).NationCode));
members.Add(new KeyValuePair<string, object>("NationName", ((Nation)data).NationName));
FillTabel("Nation", members);
}
else if (type == typeof(Chinastates))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("AreaCode", ((Chinastates)data).AreaCode));
members.Add(new KeyValuePair<string, object>("AreaName", ((Chinastates)data).AreaName));
members.Add(new KeyValuePair<string, object>("ParentAreaCode", ((Chinastates)data).ParentAreaCode));
FillTabel("Chinastates", members);
}
else if (type == typeof(uspd))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("Name", ((uspd)data).Name));
members.Add(new KeyValuePair<string, object>("Pwd", ((uspd)data).Pwd));
members.Add(new KeyValuePair<string, object>("Lastlogon", ((uspd)data).Lastlogon));
FillTabel("uspd", members);
}
else if (type == typeof(jl))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("UserName", ((jl)data).Jdenglu));
members.Add(new KeyValuePair<string, object>("PassWord", ((jl)data).Jmima));
FillTabel("jl", members);
}
ok = true;
}
catch
{
}
return ok;
}
public bool DelData(Type type, object data)
{
bool ok = false;
List<KeyValuePair<string, object>> members = new List<KeyValuePair<string, object>>();
try
{
if (type == typeof(Users))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("UserName", ((Users)data).UserName));
members.Add(new KeyValuePair<string, object>("PassWord", ((Users)data).PassWord));
members.Add(new KeyValuePair<string, object>("NickName", ((Users)data).NickName));
members.Add(new KeyValuePair<string, object>("Sex", ((Users)data).Sex));
members.Add(new KeyValuePair<string, object>("Birthday", ((Users)data).Birthday));
members.Add(new KeyValuePair<string, object>("Nation", ((Users)data).Nation));
members.Add(new KeyValuePair<string, object>("Area", ((Users)data).Area));
DelTabel("Users", members);
}
else if (type == typeof(Nation))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("NationCode", ((Nation)data).NationCode));
members.Add(new KeyValuePair<string, object>("NationName", ((Nation)data).NationName));
DelTabel("Nation", members);
}
else if (type == typeof(Chinastates))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("AreaCode", ((Chinastates)data).AreaCode));
members.Add(new KeyValuePair<string, object>("AreaName", ((Chinastates)data).AreaName));
members.Add(new KeyValuePair<string, object>("ParentAreaCode", ((Chinastates)data).ParentAreaCode));
DelTabel("Chinastates", members);
}
else if (type == typeof(uspd))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("Name", ((uspd)data).Name));
members.Add(new KeyValuePair<string, object>("Pwd", ((uspd)data).Pwd));
members.Add(new KeyValuePair<string, object>("Lastlogon", ((uspd)data).Lastlogon));
DelTabel("uspd", members);
}
else if (type == typeof(jl))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("UserName", ((jl)data).Jdenglu));
members.Add(new KeyValuePair<string, object>("PassWord", ((jl)data).Jmima));
DelTabel("jl", members);
}
ok = true;
}
catch
{
}
return ok;
}
public bool UpdateData(Type type, string name, object value, object data)
{
bool ok = false;
List<KeyValuePair<string, object>> members = new List<KeyValuePair<string, object>>();
try
{
if (type == typeof(Users))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("UserName", ((Users)data).UserName));
members.Add(new KeyValuePair<string, object>("PassWord", ((Users)data).PassWord));
members.Add(new KeyValuePair<string, object>("NickName", ((Users)data).NickName));
members.Add(new KeyValuePair<string, object>("Sex", ((Users)data).Sex));
members.Add(new KeyValuePair<string, object>("Birthday", ((Users)data).Birthday));
members.Add(new KeyValuePair<string, object>("Nation", ((Users)data).Nation));
members.Add(new KeyValuePair<string, object>("Area", ((Users)data).Area));
UpdateTabel("Users", members, name, value);
}
else if (type == typeof(Nation))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("NationCode", ((Nation)data).NationCode));
members.Add(new KeyValuePair<string, object>("NationName", ((Nation)data).NationName));
UpdateTabel("Nation", members, name, value);
}
else if (type == typeof(Chinastates))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("AreaCode", ((Chinastates)data).AreaCode));
members.Add(new KeyValuePair<string, object>("AreaName", ((Chinastates)data).AreaName));
members.Add(new KeyValuePair<string, object>("ParentAreaCode", ((Chinastates)data).ParentAreaCode));
UpdateTabel("Chinastates", members, name, value);
}
else if (type == typeof(uspd))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("Name", ((uspd)data).Name));
members.Add(new KeyValuePair<string, object>("Pwd", ((uspd)data).Pwd));
members.Add(new KeyValuePair<string, object>("Lastlogon", ((uspd)data).Lastlogon));
UpdateTabel("uspd", members, name, value);
}
else if (type == typeof(jl))
{
members.Clear();
members.Add(new KeyValuePair<string, object>("UserName", ((jl)data).Jdenglu));
members.Add(new KeyValuePair<string, object>("PassWord", ((jl)data).Jmima));
UpdateTabel("jl", members, name, value);
}
ok = true;
}
catch
{
}
return ok;
}
}
}