hola a todos, espero me puedan ayudar tengo un procedimiento almacenado en una base de datos SYBASE, este procedimiento lo ejecuto a través de un código en C# para una aplicación de consola y el resultado lo exporto a una archivo.CSV esto sin problemas, lo que necesito ahora es poder ejecutar mas de una vez ese procedimiento y el resultado poder ponerlo es un solo archivo.CSV, no se si me explico bien, bueno tratare de poner un ejemplo: tengo un listado como el siguientes con nombres de equipos:
ID|nombre_equipo
1 |BBL52E_02
2 |OSO52E_04
por cada uno de esos equipos necesito ejecutar el procedimiento almacenado 3 veces, para poder traer 2 datos correspondientes a cada equipo y el resultado exportarlo a un archivo.CSV. estos serian los procedimientos que debería ejecutar por ejemplo para el equipo numero uno (BBL52E_02).
exec sp_trendView @tablename='collect', @tagname='analog.BBL52E_02_____P.curval', @columnname='value' , @starttime='01/09/2013 00:00:00', @endtime= '01/09/2013 23:59:00'
exec sp_trendView @tablename='collect', @tagname='analog.BBL52E_02_____Q.curval', @columnname='value' , @starttime='01/09/2013 00:00:00', @endtime= '01/09/2013 23:59:00'
exec sp_trendView @tablename='collect', @tagname='analog.BBL52E_02_____S.curval', @columnname='value' , @starttime='01/09/2013 00:00:00', @endtime= '01/09/2013 23:59:00'
si se fijan lo único que cambia en cada ejecución del procedimiento es el campo llamado "tagname".
este es mi código donde solo ejecuto una ves el procedimiento:
Código c#:
Ver originalusing System;
using System.Data;
using System.Data.Odbc;
using MySql.Data.MySqlClient;
using System.IO;
namespace TestODBC
{
class Program
{
static void Main(string[] args)
{
MostrarDatos();
Console.ReadLine();
DateTime Hoy = DateTime.Today;
}
private static void MostrarDatos()
{
string strFilePath = @"C:\ datas.csv";
using (OdbcConnection oCn = new OdbcConnection("Driver={Sybase System 10};SRVR=CMX;DB=timeline;DSN=Default;UID=xisapp;PWD=apphistory;"))
{
try
{
string proc = String.Format("exec sp_trendView @tablename='{0}', @tagname='{1}', @columnname='{2}', @starttime='{3}', @endtime= '{4}'",
"collect", "analog.BBL52B_02_____P.curval", "value", "01/09/2013 00:00:00", "01/09/2013 23:59:00");
OdbcCommand oCmd = new OdbcCommand(proc,oCn);
DataTable rows = new DataTable("datos");
OdbcDataAdapter oDt = new OdbcDataAdapter(oCmd);
oCn.Open();
try
{
oDt.Fill(rows);
StreamWriter sw = new StreamWriter(strFilePath, false);
int iColCount = rows.Columns.Count;
sw.Write("Alimentador");
sw.Write(",");
sw.Write("Fecha");
sw.Write(",");
sw.Write("P");
sw.Write(",");
sw.Write("Q");
sw.Write(",");
sw.Write("S");
sw.Write(sw.NewLine);
foreach (DataRow row in rows.Rows)
{
sw.Write("BBL52B_02".ToString());
sw.Write(",");
sw.Write(row[0].ToString());
sw.Write(",");
sw.Write(row[2].ToString());
sw.Write(sw.NewLine);
}
sw.Close();
Console.WriteLine("Proceso Finalizado");
}
catch (Exception ex)
{
Console.WriteLine(String.Format("Error al consultar procedimiento : {0}", ex.Message));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
}
espero me puedan ayudar!!!