Problem
I recently working in .Net field and under circumstances had to write a program to execute sql from external source file.I have written the code and works fine but when it goes to Production server,It crashes becasuse of too amny files to handle.
Can someone just look and guide the improvement areas.
Input Params–
Mode-Inline /file(if it is inline,the user gives entire sql command and if its file,user give path of .sql file)
SqlData-sql comand or .sql file name.
static void Main(string[] args)
{
string Mode = args[0].ToString().Trim();
string sqlData = args[1].ToString().Trim();
string ServerName = args[2].ToString().Trim();
string DbName = args[3].ToString().Trim();
string Uid = args[4].ToString().Trim();
string Password = args[5].ToString().Trim();
string CsvLocation = args[6].ToString().Trim();
string CsvName = args[7].ToString().Trim();
loglocation = args[8].ToString().Trim();
try
{
string connectionString = @"Data Source=" + ServerName + ";Initial Catalog=" + DbName + ";User ID=" + Uid + ";Password=" + Password;
using (SqlConnection conn = new SqlConnection(connectionString))
{
Task<int> wakeUp = DoWorkAsync(conn, Mode, sqlData, CsvLocation, CsvName);
Task.WaitAll(wakeUp);
}
}
catch (CustomException e)
{
Console.WriteLine(e.ToString());
CustomException.Write(CustomException.CreateExceptionString(e, e.p));
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
CustomException.Write(CustomException.CreateExceptionString(e));
Console.ReadLine();
}
}
}
static Task<int> DoWorkAsync(System.Data.SqlClient.SqlConnection conn, string Mode, string sqlData, string CsvLocation, string CsvName)
{
return Task.Factory.StartNew<int>(() =>
{
try
{
string script = string.Empty;
string timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
string modefinal = Mode.ToLower();
if (modefinal == "inline")
{
script = sqlData;
}
else if (modefinal == "file")
{
script = File.ReadAllText(sqlData);
}
else
{
throw (new CustomException("wrong input Parameter: MODE"));
}
// Server server = new Server(new ServerConnection(conn));
// server.ConnectionContext.ExecuteNonQuery(script);
cmd.CommandText = script;
cmd.Connection = conn;
conn.Open();
reader = cmd.ExecuteReader();
string desiredFilename = CsvLocation + "\" + CsvName + ".csv";
if (File.Exists(desiredFilename))
{
desiredFilename = CsvLocation + "\" + CsvName + "_" + timestamp + ".csv";
}
StreamWriter writer = new StreamWriter(desiredFilename);
string Delimiter = """
Solution