using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using MySql.Data.MySqlClient; using Newtonsoft.Json.Serialization; using FastReport.Data; using FastReport.Utils; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; namespace FastReportCore { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddControllers().AddNewtonsoftJson(x => x.SerializerSettings.ContractResolver = new DefaultContractResolver()).SetCompatibilityVersion(CompatibilityVersion.Version_3_0); services.AddRazorPages(); } public void Configure(IApplicationBuilder app) { RegisteredObjects.AddConnection(typeof(MySqlDataConnection)); app.UseStatusCodePagesWithReExecute(""); app.UseFastReport(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); } } public class MySqlDataConnection : DataConnectionBase { private void GetDBObjectNames(string name, List list) { DataTable schema = null; string databaseName = ""; DbConnection connection = GetConnection(); try { OpenConnection(connection); MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder(ConnectionString); schema = connection.GetSchema(name); databaseName = builder.Database; } finally { DisposeConnection(connection); } foreach (DataRow row in schema.Rows) { if (String.IsNullOrEmpty(databaseName) || String.Compare(row["TABLE_SCHEMA"].ToString(), databaseName) == 0) list.Add(row["TABLE_NAME"].ToString()); } } public override string[] GetTableNames() { List list = new List(); GetDBObjectNames("Tables", list); GetDBObjectNames("Views", list); return list.ToArray(); } public override string QuoteIdentifier(string value, DbConnection connection) { return "`" + value + "`"; } protected override string GetConnectionStringWithLoginInfo(string userName, string password) { MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder(ConnectionString); builder.UserID = userName; builder.Password = password; return builder.ToString(); } public override Type GetConnectionType() { return typeof(MySqlConnection); } public override DbDataAdapter GetAdapter(string selectCommand, DbConnection connection, CommandParameterCollection parameters) { MySqlDataAdapter adapter = new MySqlDataAdapter(selectCommand, connection as MySqlConnection); foreach (CommandParameter p in parameters) { MySqlParameter parameter = adapter.SelectCommand.Parameters.Add(p.Name, (MySqlDbType)p.DataType, p.Size); parameter.Value = p.Value; } return adapter; } public override Type GetParameterType() { return typeof(MySqlDbType); } public override string GetConnectionId() { MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder(ConnectionString); string info = ""; try { info = builder.Database; } catch { } return "MySQL: " + info; } } }