En este pequeño ejemplo mostrare como obtener los resultados de una consulta al ejecutar un Procedimiento Almacenado en una Base de Datos SQL Server y publicar la consulta en un servidor FTP.
Es una aplicación de consola sencilla que espero les sea muy útil.
En este ejemplo defino un modelo de datos simple con 4 campos
class ReportsModel
{
public string CardNumber { get; set; }
public string Item { get; set; }
public string Units { get; set; }
public string UnitsBonus { get; set; }
}
El archivo publicado en el servidor FTP será un txt con la siguiente forma:
CardNumber|Item|Units|UnitsBonus
CardNumber|Item|Units|UnitsBonus
CardNumber|Item|Units|UnitsBonus
etc...
string connString = "Data Source=tcp:<nombredeServidor>.database.windows.net,1433;Initial Catalog=<nombreBasedeDatos>;Integrated Security=False;User ID=<usuario>@<nombredeServidor>;Password=<contraseña>;Connect Timeout=30";
SqlConnection conn = new SqlConnection(connString);
SqlCommand command = new SqlCommand("<Nombre de procedimiento almacenado>", conn);
command.CommandType = CommandType.StoredProcedure;
SqlDataReader reader;
List<ReportsModel> reports = new List<ReportsModel>();
try
{
conn.Open();
reader = command.ExecuteReader();
while (reader.Read())
{
reports.Add(new ReportsModel
{
CardNumber = Convert.ToString(reader["CardNumber"]),
Item = Convert.ToString(reader["Item"]),
Units = Convert.ToString(reader["Units"]),
UnitsBonus = Convert.ToString(reader["UnitsBonus"]),
});
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
conn.Close();
}
List<string> file = new List<string>();
foreach (var item in reports)
{
file.Add(item.CardNumber + "|" + item.Item + "|" + item.Units + "|" + item.UnitsBonus);
}
createFile(file);
public static void createFile(List<string> file)
{
string date = DateTime.Now.ToString("dd/MM/yyyy").Replace("/", "");
string connftp = "<Direccion_de_servidor_ftp>" + date + ".txt";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(connftp);
request.Credentials = new NetworkCredential("<Usuario>", "<Contraseña>");
request.Method = WebRequestMethods.Ftp.UploadFile;
byte[] fileContent = file.SelectMany(s => Encoding.UTF8.GetBytes(s + Environment.NewLine)).ToArray();
request.ContentLength = fileContent.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContent, 0, fileContent.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Console.WriteLine(response.StatusDescription);
response.Close();
}
Para más información pueden consultar