sqlsugar/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqliteProvider.cs

141 lines
5.7 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.Data.Sqlite;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using Microsoft.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SqlSugar
{
public partial class SqliteProvider : AdoProvider
{
public SqliteProvider() { }
public override IDbConnection Connection
{
get
{
if (base._DbConnection == null)
{
try
{
var SQLiteConnectionString = base.Context.CurrentConnectionConfig.ConnectionString;
if (SQLiteConnectionString!=null&&!SQLiteConnectionString.Contains("="))
{
Check.ExceptionEasy("ConnString format error . Correct format DataSource=...", "字符串格式错误应该是DataSource=...");
}
base._DbConnection = new SqliteConnection(SQLiteConnectionString);
}
catch (Exception ex)
{
if (ex.InnerException != null)
{
Check.Exception(true, ErrorMessage.ConnnectionOpen, ex.Message+"\r\n"+ex.InnerException.Message);
}
else
{
Check.Exception(true, ErrorMessage.ConnnectionOpen, ex.Message);
}
}
}
return base._DbConnection;
}
set
{
base._DbConnection = value;
}
}
public override void BeginTran(string transactionName)
{
base.BeginTran();
}
/// <summary>
/// Only SqlServer
/// </summary>
/// <param name="iso"></param>
/// <param name="transactionName"></param>
public override void BeginTran(IsolationLevel iso, string transactionName)
{
base.BeginTran(iso);
}
public override IDataAdapter GetAdapter()
{
return new SqliteDataAdapter();
}
public override DbCommand GetCommand(string sql, SugarParameter[] parameters)
{
SqliteCommand sqlCommand = new SqliteCommand(sql, (SqliteConnection)this.Connection);
sqlCommand.CommandType = this.CommandType;
sqlCommand.CommandTimeout = this.CommandTimeOut;
if (this.Transaction != null)
{
sqlCommand.Transaction = (SqliteTransaction)this.Transaction;
}
if (parameters.HasValue())
{
IDataParameter[] ipars = ToIDbDataParameter(parameters);
sqlCommand.Parameters.AddRange((SqliteParameter[])ipars);
}
CheckConnection();
return sqlCommand;
}
public override void SetCommandToAdapter(IDataAdapter dataAdapter, DbCommand command)
{
((SqliteDataAdapter)dataAdapter).SelectCommand = (SqliteCommand)command;
}
/// <summary>
/// if SQLite return SQLiteParameter[] pars
/// if sqlerver return SqlParameter[] pars ...
/// </summary>
/// <param name="parameters"></param>
/// <returns></returns>
public override IDataParameter[] ToIDbDataParameter(params SugarParameter[] parameters)
{
if (parameters == null || parameters.Length == 0) return null;
SqliteParameter[] result = new SqliteParameter[parameters.Length];
int index = 0;
var isVarchar = this.Context.IsVarchar();
foreach (var parameter in parameters)
{
if (parameter.Value == null) parameter.Value = DBNull.Value;
if (parameter.Value.GetType() == UtilConstants.GuidType)
{
parameter.Value = parameter.Value.ToString();
}
var sqlParameter = new SqliteParameter();
sqlParameter.ParameterName = parameter.ParameterName;
sqlParameter.Size = parameter.Size;
sqlParameter.Value = parameter.Value;
sqlParameter.DbType = parameter.DbType;
result[index] = sqlParameter;
if (sqlParameter.Direction.IsIn(ParameterDirection.Output, ParameterDirection.InputOutput,ParameterDirection.ReturnValue)) {
if (this.OutputParameters == null) this.OutputParameters = new List<IDataParameter>();
this.OutputParameters.RemoveAll(it => it.ParameterName == sqlParameter.ParameterName);
this.OutputParameters.Add(sqlParameter);
}
if (sqlParameter.DbType == System.Data.DbType.Guid) {
sqlParameter.DbType = System.Data.DbType.String;
if (sqlParameter.Value != DBNull.Value)
{
sqlParameter.Value = sqlParameter.Value.ObjToString();
}
}
if (isVarchar && sqlParameter.DbType == System.Data.DbType.String)
{
sqlParameter.DbType = System.Data.DbType.AnsiString;
}
else if (parameter.DbType == System.Data.DbType.DateTimeOffset)
{
if (sqlParameter.Value != DBNull.Value)
sqlParameter.Value = UtilMethods.ConvertFromDateTimeOffset((DateTimeOffset)sqlParameter.Value);
sqlParameter.DbType = System.Data.DbType.DateTime;
}
++index;
}
return result;
}
}
}