J'essaye d'analyser les fichiers dans le répertoire/insérer dans la base de données mysql basé sur ce post et à peu près cela fonctionne, sauf que les valeurs de csv pour chaque colonne sont arrondies et deviennent des valeurs INT dans la base de données. Je suppose que j'ai besoin de changer DECIMAL pour quelque chose d'autre, mais je ne pouvais pas le comprendre.rechercher fichier csv dans un dossier et insérer dans la base de données mysql
(Ex: 1.11 devient 1, 45,5 devient 46)
fichier csv:
test1,test2,test3,test4
1.11,1.23,67.4,4.5
1.12,5.42,45.5,6.45
mon code:
public void sqlTest()
{
string connectionString = "server=localhost;database=test;UserId=root;password=test;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
using (MySqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = @"DROP TABLE test IF EXISTS";
cmd.CommandText = @"CREATE TABLE test (
Id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
test1 DECIMAL,
test2 DECIMAL,
test3 DECIMAL,
test4 DECIMAL
)";
cmd.ExecuteNonQuery();
}
connection.Close();
connection.Open();
using (MySqlCommand insertCommand = connection.CreateCommand())
{
insertCommand.CommandText =
@"INSERT INTO test (test1, test2, test3, test4)
VALUES (@test1, @test2, @test3, @test4)";
insertCommand.Parameters.Add(new MySqlParameter("@test1", DbType.Decimal));
insertCommand.Parameters.Add(new MySqlParameter("@test2", DbType.Decimal));
insertCommand.Parameters.Add(new MySqlParameter("@test3", DbType.Decimal));
insertCommand.Parameters.Add(new MySqlParameter("@test4", DbType.Decimal));
string[] files = Directory.GetFiles("D:/computer/csv files", "*.csv");
foreach (string file in files)
{
string[] lines = System.IO.File.ReadAllLines(file);
bool parse = false;
foreach (string tmpLine in lines)
{
string line = tmpLine.Trim();
if (!parse && line.StartsWith("test1"))
{
parse = true;
continue;
}
if (!parse || string.IsNullOrEmpty(line))
{
continue;
}
foreach (MySqlParameter parameter in insertCommand.Parameters)
{
parameter.Value = null;
}
string[] values = line.Split(new[] { ',' });
for (int i = 0; i < values.Length; i++)
{
MySqlParameter param = insertCommand.Parameters[i];
decimal value;
param.Value = decimal.TryParse(values[i], out value) ? value : 0;
}
insertCommand.ExecuteNonQuery();
}
}
}
connection.Close();
}
}
}
Toute orientation ou des conseils est appréciée!
flotteur ?? réal??? – Viru