mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-04-24 18:04:52 +08:00
Add MySqlblueCopy
This commit is contained in:
parent
1d457ccac2
commit
293b9c7c97
@ -228,7 +228,10 @@ namespace SqlSugar
|
||||
};
|
||||
return this;
|
||||
}
|
||||
|
||||
public MySqlBlueCopy<T> UseMySql()
|
||||
{
|
||||
return new MySqlBlueCopy<T>(this.Context, this.SqlBuilder, InsertObjs);
|
||||
}
|
||||
public SqlServerBlueCopy UseSqlServer()
|
||||
{
|
||||
PreToSql();
|
||||
|
@ -779,12 +779,6 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Entity Maintenance
|
||||
[Obsolete("Use SqlSugarClient.EntityMaintenance")]
|
||||
public virtual EntityMaintenance EntityProvider
|
||||
{
|
||||
get { return this.Context.EntityMaintenance; }
|
||||
set { this.Context.EntityMaintenance = value; }
|
||||
}
|
||||
public virtual EntityMaintenance EntityMaintenance
|
||||
{
|
||||
get
|
||||
|
@ -160,14 +160,5 @@ namespace SqlSugar
|
||||
IUpdateable<T> Updateable<T>(T UpdateObj) where T : class, new();
|
||||
IUpdateable<T> Updateable<T>(T[] UpdateObjs) where T : class, new();
|
||||
#endregion
|
||||
|
||||
#region Obsolete
|
||||
[Obsolete("use Utilities")]
|
||||
IContextMethods RewritableMethods { get; set; }
|
||||
[Obsolete("use GetSimpleClient()")]
|
||||
SimpleClient SimpleClient { get; }
|
||||
[Obsolete("use EntityMaintenance")]
|
||||
EntityMaintenance EntityProvider { get; set; }
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -36,6 +36,7 @@ namespace SqlSugar
|
||||
IInsertable<T> RemoveDataCache();
|
||||
KeyValuePair<string, List<SugarParameter>> ToSql();
|
||||
SqlServerBlueCopy UseSqlServer();
|
||||
MySqlBlueCopy<T> UseMySql();
|
||||
void AddQueue();
|
||||
|
||||
#region Obsolete
|
||||
|
@ -0,0 +1,140 @@
|
||||
using MySql.Data.MySqlClient;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlBlueCopy<T>
|
||||
{
|
||||
internal SqlSugarProvider Context { get; set; }
|
||||
internal ISqlBuilder Builder { get; set; }
|
||||
internal T[] Entitys { get; set; }
|
||||
private MySqlBlueCopy()
|
||||
{
|
||||
|
||||
}
|
||||
public MySqlBlueCopy(SqlSugarProvider context, ISqlBuilder builder, T []entitys)
|
||||
{
|
||||
this.Context = context;
|
||||
this.Builder = builder;
|
||||
this.Entitys = entitys;
|
||||
}
|
||||
|
||||
public bool ExecuteBlueCopy()
|
||||
{
|
||||
var IsBulkLoad = false;
|
||||
if (Entitys == null || Entitys.Length <= 0)
|
||||
return IsBulkLoad;
|
||||
DataTable dt = new DataTable();
|
||||
Type type = typeof(T);
|
||||
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||
dt.TableName = this.Builder.GetTranslationColumnName(entity.DbTableName);
|
||||
//创建属性的集合
|
||||
List<PropertyInfo> pList = new List<PropertyInfo>();
|
||||
//把所有的public属性加入到集合 并添加DataTable的列
|
||||
Array.ForEach(entity.Columns.ToArray(), p => {
|
||||
if (!p.IsIgnore&& !p.IsOnlyIgnoreInsert)
|
||||
{
|
||||
pList.Add(p.PropertyInfo); dt.Columns.Add(p.PropertyName);
|
||||
}
|
||||
});
|
||||
DataRow row = null;
|
||||
foreach (T item in Entitys)
|
||||
{
|
||||
row = dt.NewRow();
|
||||
pList.ForEach(p =>
|
||||
{
|
||||
var name = p.Name;
|
||||
if (entity.Columns.Any(it => it.PropertyName == name))
|
||||
{
|
||||
name=entity.Columns.First(it => it.PropertyName == name).DbColumnName;
|
||||
}
|
||||
row[name] = p.GetValue(item, null);
|
||||
});
|
||||
dt.Rows.Add(row);
|
||||
}
|
||||
var dllPath = AppDomain.CurrentDomain.BaseDirectory + "failFiles";
|
||||
DirectoryInfo dir = new DirectoryInfo(dllPath);
|
||||
if (!dir.Exists)
|
||||
{
|
||||
dir.Create();
|
||||
}
|
||||
var fileName = dllPath + "\\" + Guid.NewGuid().ToString() + ".csv";
|
||||
var dataTableToCsv = DataTableToCsvString(dt);
|
||||
File.WriteAllText(fileName, dataTableToCsv, Encoding.UTF8);
|
||||
MySqlConnection conn = this.Context.Ado.Connection as MySqlConnection;
|
||||
try
|
||||
{
|
||||
this.Context.Ado.Open();
|
||||
// IsolationLevel.Parse
|
||||
MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
|
||||
{
|
||||
CharacterSet = "UTF8",
|
||||
FieldTerminator = ",",
|
||||
FieldQuotationCharacter = '"',
|
||||
EscapeCharacter = '"',
|
||||
LineTerminator = "\r\n",
|
||||
FileName = fileName,
|
||||
NumberOfLinesToSkip = 0,
|
||||
TableName = dt.TableName,
|
||||
Local = true,
|
||||
};
|
||||
bulk.Columns.AddRange(dt.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).Distinct().ToArray());
|
||||
IsBulkLoad = bulk.Load() > 0;
|
||||
//执行成功才删除文件
|
||||
if (IsBulkLoad && File.Exists(fileName))
|
||||
{
|
||||
File.Delete(fileName);
|
||||
}
|
||||
conn.Close();
|
||||
}
|
||||
catch (MySqlException ex)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
finally
|
||||
{
|
||||
this.Context.Ado.Close();
|
||||
}
|
||||
return IsBulkLoad; ;
|
||||
}
|
||||
|
||||
public Task<bool> ExecuteBlueCopyAsync()
|
||||
{
|
||||
return Task.FromResult(ExecuteBlueCopy());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///DataTable to CSV
|
||||
/// </summary>
|
||||
/// <param name="table">datatable</param>
|
||||
/// <returns>CSV</returns>
|
||||
public string DataTableToCsvString(DataTable table)
|
||||
{
|
||||
if (table.Rows.Count == 0)
|
||||
return "";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
DataColumn colum;
|
||||
foreach (DataRow row in table.Rows)
|
||||
{
|
||||
for (int i = 0; i < table.Columns.Count; i++)
|
||||
{
|
||||
colum = table.Columns[i];
|
||||
if (i != 0) sb.Append(",");
|
||||
if (colum.DataType == typeof(string) && row[colum].ToString().Contains(","))
|
||||
{
|
||||
sb.Append("\"" + row[colum].ToString().Replace("\"", "\"\"") + "\"");
|
||||
}
|
||||
else sb.Append(row[colum].ToString());
|
||||
}
|
||||
sb.AppendLine();
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
@ -153,6 +153,7 @@
|
||||
<Compile Include="Interface\ISqlSugarClient.cs" />
|
||||
<Compile Include="Interface\ITenant.cs" />
|
||||
<Compile Include="Interface\ISimpleClient.cs" />
|
||||
<Compile Include="Realization\MySql\SqlBuilder\MySqlBlueCopy.cs" />
|
||||
<Compile Include="Realization\Oracle\Deleteable\OracleDeleteable.cs" />
|
||||
<Compile Include="Realization\Oracle\Insertable\OracleInsertable.cs" />
|
||||
<Compile Include="Realization\Oracle\Updateable\OracleUpdateable.cs" />
|
||||
|
@ -959,20 +959,5 @@ namespace SqlSugar
|
||||
this.CurrentConnectionConfig = Tenant.ConnectionConfig;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Obsolete
|
||||
[Obsolete("Use GetSimpleClient<T>")]
|
||||
public SimpleClient GetSimpleClient()
|
||||
{
|
||||
return this.Context.GetSimpleClient();
|
||||
}
|
||||
[Obsolete("Use EntityMaintenance")]
|
||||
public EntityMaintenance EntityProvider { get { return this.Context.EntityProvider; } set { this.Context.EntityProvider = value; } }
|
||||
[Obsolete("Use Utilities")]
|
||||
public IContextMethods RewritableMethods { get { return this.Context.RewritableMethods; } set { this.Context.RewritableMethods = value; } }
|
||||
[Obsolete("Use GetSimpleClient")]
|
||||
public SimpleClient SimpleClient { get { return this.Context.SimpleClient; } }
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user