Commit db2a11fc authored by 潘栩锋's avatar 潘栩锋 🚴

删除 SQLiteHelper

parent 7438b8f6
Pipeline #110 failed with stages
# SQLiteRemote
sqlite 局域网远程访问
\ No newline at end of file
sqlite 局域网远程访问
远程代理 是基于 WSCF (WebSocket Communication Foundation) 建立的
WSCF 项目:http://private.flyautomation.net:82/panruising/wscf.git
## RemoteSQLite
**项目主体**
ISQLiteRemoteService *SQLite服务代理*<br/>
ISysTimeService *系统时间*<br/>
## SQLiteRemoteServerUI
**SQLite服务代理**
<br/>
SQLiteRemoteServerUI 只是 RemoteSQLite.RemoteSQLiteServer 的外壳。<br/>
使用方法:<br/>
放在 ###.sqlite3 文件 那台电脑上运行。 <br/>
<br/>
它提供2个服务<br/>
/SQLiteRemote *SQLite操作*
1. ExecuteReader
2. ExecuteNonQuery
3. ExecuteScalar
/SysTime *系统时间操作*
1. Now
2. SetTime *通过网络延时比较准确设置时间*
3. GetTime
## SQLiteRemoteClientUI
**SQLiteRemoteServiceClient 的测试**
<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace SQLite
{
public class DBTable<T> : IDBTable
where T : new()
{
public string TableName { get; private set; }
private long freeID = 0;
/// <summary>
/// 每次获取,自动++
/// </summary>
public long FreeID
{
get
{
return freeID++;
}
set {
freeID = value;
}
}
private string ddl;
public string DDL
{
get
{
return ddl;
}
}
public SQLiteHelper sqliteHelper;
public DBTable()
{
TableName = SQLiteHelper.GetTableName(typeof(T));
ddl = SQLiteHelper.GetCreateTableCommandText(typeof(T));
}
public void Init(SQLiteHelper sQLiteHelper)
{
sqliteHelper = sQLiteHelper;
}
public void Create()
{
sqliteHelper.ExecuteNonQuery(ddl);// SQLiteHelper.GetCreateTableCommandText(typeof(T)));//, ArrayFieldTypeInfos.ToArray()));
}
public void Add(T t)
{
sqliteHelper.ExecuteNonQuery(SQLiteHelper.GetInsertCommandText(t));
}
public void Update(T t, string condition)
{
sqliteHelper.ExecuteNonQuery(SQLiteHelper.GetUpdateCommandText(t, condition));
}
public bool AddRange(IEnumerable<T> array)
{
List<string> querys = new List<string>();
foreach (T t in array)
{
querys.Add(SQLiteHelper.GetInsertCommandText(t));
}
return sqliteHelper.QueryTran(querys);
}
public List<T> Find(string condition)
{
string sql = $"SELECT * FROM {TableName}";
if (!string.IsNullOrEmpty(condition))
sql += " " + condition;
DataTable dataTable = sqliteHelper.ExecuteReader(sql);
return SQLiteHelper.ToObjs<T>(dataTable);
}
/// <summary>
/// 获取最后N行数据
/// </summary>
/// <param name="count"></param>
/// <returns></returns>
public List<T> Last(int count)
{
return Find($"LIMIT (SELECT COUNT()-{count} FROM {TableName}),{count}");
}
/// <summary>
/// 获取前面N行数据
/// </summary>
/// <param name="count"></param>
/// <returns></returns>
public List<T> First(int count)
{
return Find($"LIMIT {count}");
}
public void Remove()
{
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SQLite
{
public interface IDBTable
{
/// <summary>
/// 表名
/// </summary>
string TableName { get; }
/// <summary>
/// 表的 Create SQL
/// </summary>
string DDL { get; }
/// <summary>
/// 创建表
/// </summary>
void Create();
long FreeID { get; set; }
/// <summary>
/// 初始化
/// </summary>
/// <param name="sQLiteHelper"></param>
void Init(SQLiteHelper sQLiteHelper);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SQLite
{
public interface IDbBase
{
Int64 ID { get; set; }
}
}

using System;
namespace SQLite
{
public class IgnoreAttribute : Attribute
{
public IgnoreAttribute()
{
}
}
public class PropertyIndexAttribute : Attribute
{
/// <summary>
/// 标识
/// </summary>
public int Index { get; set; }
/// <summary>
///
/// </summary>
/// <param name="index"></param>
public PropertyIndexAttribute(int index)
{
Index = index;
}
}
}
\ No newline at end of file
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("SQLiteHelper")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SQLiteHelper")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("4cbabfaa-1c62-4510-ac63-a51ee5fd50ff")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SQLite
{
public abstract class SQLiteDbContext
{
public List<IDBTable> DbSet = new List<IDBTable>();
public SQLiteHelper sqliteHelper { get; private set; }
string ConnectionString
{
get
{
return string.Format("Data Source={0};Version=3;", DBPath);
}
}
public string DBPath { get; private set; } = @"test.sqlite3";
public SQLiteDbContext(string dbPath)
{
DBPath = dbPath;
Constructor();
}
void Constructor()
{
sqliteHelper = new SQLiteHelper();
sqliteHelper.ConnectionString = ConnectionString;
var type = GetType();
foreach (var p in type.GetProperties())
{
if (typeof(IDBTable).IsAssignableFrom(p.PropertyType))
{
DbSet.Add(p.GetValue(this) as IDBTable);
}
}
foreach (IDBTable dBTable in DbSet)
{
dBTable.Init(sqliteHelper);
}
}
public void SetDBPath(string dbPath)
{
DBPath = dbPath;
sqliteHelper.ConnectionString = ConnectionString;
}
void Build()
{
string directoryname = System.IO.Path.GetDirectoryName(DBPath);
if (!string.IsNullOrEmpty(directoryname) && !System.IO.Directory.Exists(directoryname))
System.IO.Directory.CreateDirectory(directoryname);
SQLiteConnection.CreateFile(DBPath);
foreach (IDBTable dBTable in DbSet)
dBTable.Create();
}
void Rebuild()
{
if (!System.IO.File.Exists(DBPath))
{
Build();
}
else
{
//把文件删除,重建
System.IO.File.Delete(DBPath);
Build();
}
}
void Load()
{
foreach(var table in DbSet)
{
table.FreeID = LoadID(table.TableName);
}
}
long LoadID(string tablename)
{
string cmd = $"SELECT MAX(ID) FROM {tablename}";
var reponse = sqliteHelper.ExecuteScalar(cmd);
if (reponse is DBNull)
return 0;
else
return System.Convert.ToInt64(reponse) + 1;
}
/// <summary>
/// 给定分区数 检测表是否存在,合法
/// </summary>
/// <param name="nbolts"></param>
/// <returns>false 表不合法,重建; true 正常!</returns>
public bool Init()
{
if (!System.IO.File.Exists(DBPath))
{
Build();
return false;
}
//TODO, 表不对删除就好。。。没必要重新创建数据库
//任意一个表不对,或者不存在,都必须重建
Dictionary<string, string> ddls = new Dictionary<string, string>();
foreach (IDBTable tb in DbSet)
{
ddls.Add(tb.TableName, tb.DDL);
}
bool isVaild = sqliteHelper.IsTableValid(ddls, out Dictionary<string, SQLiteHelper.IsTableValidResult> results);
if (!isVaild)//不合法
{
if (results.Any(kv => kv.Value == SQLiteHelper.IsTableValidResult.FormatErr))
{
//先备份
File.Copy(DBPath, DBPath + $".{DateTime.Now:yyyyMMddHHmmss}.bk");
}
//有表 不对
foreach (var kv in results)
{
switch (kv.Value)
{
case SQLiteHelper.IsTableValidResult.NotHere:
{
//直接创建表
sqliteHelper.ExecuteNonQuery(ddls[kv.Key]);
}
break;
case SQLiteHelper.IsTableValidResult.FormatErr:
{
//先删除表,再创建
sqliteHelper.ExecuteNonQuery($"DROP TABLE {kv.Key}");
sqliteHelper.ExecuteNonQuery(ddls[kv.Key]);
}
break;
}
}
}
//最后也要加载数据
Load();
return isVaild;
}
/// <summary>
/// 当出错,不重建表
/// </summary>
/// <returns></returns>
public bool InitNoBuild()
{
if (!System.IO.File.Exists(DBPath))
{
Build();
return false;
}
//TODO, 表不对删除就好。。。没必要重新创建数据库
//任意一个表不对,或者不存在,都必须重建
Dictionary<string, string> ddls = new Dictionary<string, string>();
foreach (IDBTable tb in DbSet)
{
ddls.Add(tb.TableName, tb.DDL);
}
if (sqliteHelper.IsTableValid(ddls))
{
Load();
return true;
}
else
{
return false;
}
}
}
}
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{4CBABFAA-1C62-4510-AC63-A51EE5FD50FF}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SQLite</RootNamespace>
<AssemblyName>SQLite</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="DBTable.cs" />
<Compile Include="IDbBase.cs" />
<Compile Include="IDBTable.cs" />
<Compile Include="IgnoreAttribute.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SQLiteDbContext.cs" />
<Compile Include="SQLiteHelper.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json">
<Version>12.0.3</Version>
</PackageReference>
<PackageReference Include="NLog">
<Version>4.6.8</Version>
</PackageReference>
<PackageReference Include="System.Data.SQLite">
<Version>1.0.112</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment