Ejecutar Porcedimiento almacenado desde C#

Iniciado por proteus8, 12 Septiembre 2013, 20:53 PM

0 Miembros y 1 Visitante están viendo este tema.

proteus8

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#:

Código (csharp) [Seleccionar]

using 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!!!