Я создал MySql-адаптер для загрузки данных MySql в класс Gerneric. (Легко создать класс http://json2csharp.com/) Первое свойство - это id-индекс этого.
Но моя проблема в том, чтобы создать команду вставки, точнее заполнить экземпляр значениями из Generic T:
public bool SqlInsertOrUpdate<T>(T insertObj, string table, bool updateOnDuplicateKey = true)
{
try
{
using ( var connection = new MySql.Data.MySqlClient.MySqlConnection(connectionString) )
using ( var command = connection.CreateCommand() )
{
command.CommandText = "INSERT INTO " + table;
var properties = typeof(T).GetProperties();
var instance = (T)Activator.CreateInstance(typeof(T));
string commandCols = "";
string commandValues = "";
string commanDuplicateKey = "";
for ( int i = 0; i < properties.Length; i++ )
if ( properties[i] != null )
{
if ( i == 0 )
{
commandCols += "(";
commandCols += properties[i].Name;
commandValues += " VALUES (?";
commandValues += "?" + properties[i].Name;
}
else if ( i != properties.Length )
{
commandCols += ",";
commandCols += properties[i].Name; commandValues += ", ?";
commandValues += properties[i].Name;
commanDuplicateKey += properties[i].Name
+ "=values(?" + properties[i].Name + "), ";
}
else if ( i == properties.Length )
{
commandCols += ")";
commandValues += ")";
commanDuplicateKey += properties[i].Name
+ "=values(" + properties[i].GetValue(insertObj) + ")";
}
//Value of Generic T ? insert Objekt[0] (properties).insertObj[0] ?
command.Parameters.AddWithValue("?" + properties[i].Name,
properties[i].GetValue(insertObj));
}
command.CommandText += commandCols;
command.CommandText += commandValues;
if ( updateOnDuplicateKey )
{
command.CommandText += commanDuplicateKey;
}
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
catch ( Exception ex )
{
return false;
}
return true;
}