66 lines
3.3 KiB
C#

#pragma warning disable 1591
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Threading.Tasks;
using MySqlConnector;
using de.hottis.genericdatabaseapiservice.Models;
namespace de.hottis.genericdatabaseapiservice.Services {
public interface IDbService {
Task<List<TOUT>> ReadBySelect<TIN, TOUT>(string selectStatement, TIN input);
}
public class DbService : IDbService {
async public Task<List<TOUT>> ReadBySelect<TIN, TOUT>(string selectStatement, TIN input) {
var itemList = new List<TOUT>();
using (var conn = new MySqlConnection("Server=172.16.10.18;User ID=apiservicetestdb;Password=geheim123;Database=apiservicetestdb")) {
await conn.OpenAsync();
using (var cmd = conn.CreateCommand()) {
cmd.CommandText = selectStatement;
if (input != null){
foreach (var propertyInfo in typeof(TIN).GetProperties()) {
Console.WriteLine("Input Property name: {0} {1} ", propertyInfo.Name, propertyInfo.PropertyType);
var attributes = propertyInfo.GetCustomAttributes(typeof(DataMemberAttribute), true);
var dma = (DataMemberAttribute)attributes[0];
Console.WriteLine("Input DataMember name: {0} {1} ", dma.Name, dma.TypeId);
var value = propertyInfo.GetValue(input);
Console.WriteLine("Input Value: {0}", value);
cmd.Parameters.AddWithValue(dma.Name, propertyInfo.GetValue(input));
}
} else {
Console.WriteLine("no input data");
}
using (var reader = await cmd.ExecuteReaderAsync()) {
while (await reader.ReadAsync()) {
var item = Activator.CreateInstance<TOUT>();
foreach (var propertyInfo in typeof(TOUT).GetProperties()) {
Console.WriteLine("Output Property name: {0} {1} ", propertyInfo.Name, propertyInfo.PropertyType);
var attributes = propertyInfo.GetCustomAttributes(typeof(DataMemberAttribute), true);
var dma = (DataMemberAttribute)attributes[0];
Console.WriteLine("Output DataMember name: {0} {1} ", dma.Name, dma.TypeId);
if (propertyInfo.PropertyType == typeof(System.String)) {
propertyInfo.SetValue(item, reader.GetString(dma.Name));
Console.WriteLine("Output Value:{0}", reader.GetString(dma.Name));
} else if (propertyInfo.PropertyType == typeof(System.Int32)) {
propertyInfo.SetValue(item, reader.GetInt32(dma.Name));
Console.WriteLine("Output Value:{0}", reader.GetInt32(dma.Name));
}
}
itemList.Add(item);
}
}
}
}
return itemList;
}
}
}
#pragma warning restore 1591