This is my first try with a database. I read some articles/books and now i tried it myself and I want to know if I can write it better or what are my mistakes. All in all I am using try/catch/finally, making more statements in one method, more DBs and have the Connection in a private method. I am not using functions on the DB side, because this will come in the future.
Problems:
- It is pretty long > many statements
- Mixing 2 databases in one method
- I don't know where to use try/catch
- For example setting the connection and for getting the next ID I wrote an other method
- Is it good to declare the variables at the beginning? Declare it when I am using it?
public void ExportDocuments(List<string> arrayIds)
{
var getNpgsqlConnection = SetNpgsqlConnection();
var getMRDGlrConnection = SetMRDGlrConnection();
int f_id = 0;
int period = 0;
int mrnumber = 0;
bool mrCreated = true;
bool f_exportcheckbox;
string f_name = String.Empty;
string f_subject = String.Empty;
string f_agendanumber = String.Empty;
string foldername = String.Empty;
DateTime mrdate = DateTime.Now;
Dictionary<int, string> ressortList = new Dictionary<int, string>();
try
{
int getNextMRId = GetNextMRId(); //gets the last ID+1 from DB
foreach (var item in arrayIds)
{
using (var cmd = new NpgsqlCommand())
{
cmd.Connection = getNpgsqlConnection ;
cmd.CommandText = "SELECT f_id, f_name, f_subject, f_agendanumber, f_exportcheckbox, period, mrnumber, foldername, mrdate FROM mrd_folder.files INNER JOIN mrd_folder.folders ON files.f_folders_id = folders.id WHERE f_id = @arrayId;";
cmd.Parameters.AddWithValue("arrayId", Convert.ToInt32(item));
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
try
{
f_id = (int)reader["f_id"];
f_name = reader["f_name"].ToString();
f_subject = reader["f_subject"].ToString();
f_agendanumber = reader["f_agendanumber"].ToString();
f_exportcheckbox = (bool)reader["f_exportcheckbox"];
period = (int)reader["period"];
mrnumber = 1002;// (int)reader["mrnumber"];
mrdate = (DateTime)reader["mrdate"];
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
throw;
}
}
}
}
using (var getRessorts = new NpgsqlCommand())
{
getRessorts.Connection = getNpgsqlConnection ;
getRessorts.CommandText = "SELECT ressortsbeantragung.r_id, ressorts.r_abbrevention FROM mrd_folder.ressortsbeantragung INNER JOIN mrd_folder.ressorts ON ressortsbeantragung.r_id = ressorts.r_id WHERE ressortsbeantragung.f_id = @arrayId";
getRessorts.Parameters.AddWithValue("arrayId", Convert.ToInt32(item));
using (var readRessort = getRessorts.ExecuteReader())
{
while (readRessort.Read())
{
try
{
ressortList.Add((int)readRessort["r_id"], readRessort["r_abbrevention"].ToString());
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
throw;
}
}
}
}
//Import to MRO
try
{
using (var cmd = new NpgsqlCommand())
{
cmd.Connection = getMRDGlrConnection ;
if (mrCreated)
{
string currentDate = DateTime.Now.GetDateTimeFormats()[5];
cmd.CommandText = "SELECT insertmrsitzung(@period, @mrnumber, @mrdate)";
cmd.Parameters.AddWithValue("period", period);
cmd.Parameters.AddWithValue("mrnumber", mrnumber.ToString());
cmd.Parameters.Add("mrdate", NpgsqlTypes.NpgsqlDbType.Date);
cmd.Parameters[2].Value = mrdate;
cmd.ExecuteNonQuery();
mrCreated = false;
}
cmd.CommandText = String.Empty;
cmd.Parameters.Clear();
cmd.CommandText = "SELECT inserttopunkt(@f_id, @f_agendanumber, @f_subject, '')";
cmd.Parameters.AddWithValue("f_id", getNextMRId);
cmd.Parameters.AddWithValue("f_agendanumber", f_agendanumber);
cmd.Parameters.AddWithValue("f_subject", f_subject);
cmd.ExecuteNonQuery();
foreach (var res in ressortList)
{
cmd.CommandText = String.Empty;
cmd.Parameters.Clear();
if (res.Value == "BKA")
{
string rename = "BK";
//cmd.Parameters.AddWithValue("r_kurz", rename);
cmd.CommandText = @"SELECT inserttopunktressort(@f_id, @f_agendanumber, '" + rename + "')";
}
else
cmd.CommandText = @"SELECT inserttopunktressort(@f_id, @f_agendanumber, '" + res.Value + "')";
cmd.Parameters.AddWithValue("f_id", getNextMRId);
cmd.Parameters.AddWithValue("f_agendanumber", f_agendanumber);
cmd.ExecuteNonQuery();
}
}
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
throw;
}
ressortList.Clear();
}
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
throw;
}
finally
{
getNpgsqlConnection.Close();
getMRDGlrConnection.Close();
}
}
private NpgsqlConnection SetNpgsqlConnection()
{
var setConnectionString = ConfigurationManager.ConnectionStrings["Test1"];
string getConnectionString = setConnectionString.ConnectionString;
var npgsqlConnection = new NpgsqlConnection();
npgsqlConnection.ConnectionString = getConnectionString;
try
{
npgsqlConnection.Open();
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
throw;
}
return npgsqlConnection;
}
arrayIdswhen it's not an array. \$\endgroup\$