none
ejecutar una codigo sql desde visual studio 2012 RRS feed

  • Pregunta

  • Buenas tardes a todos una pregunta miren tengo una consulta sql la cual crea dos variables tipo tablas 

    posteriormente a estas tablas  les inserto datos 

    y por ultimo hago un select a una de estas tablas todo esto lo armo en una cadena para q se ajecutada en sql 

    mi problema es como hacer ejecutar toda esa cadena 

    este es mi codigo :

         

    string sqlTablas =
               " declare @PreAsignacion table(IdObjetoCarga int, VIN varchar(max), " +
               "   Solicitud varchar(max), " +
               "   KM int,  " +
               "   Vunidad varchar(max) " +
               "   ) " +

               "declare @sugRampa table(IdObjetoCarga int, VIN varchar(max), " +
               "   Solicitud varchar(max), " +
               "   KM int, " +
               "   Vunidad varchar(max), " +
               "   Rampa int " +
               "   ) ";

            string InsertV = string.Empty;
            for (int i = 0; i < lsLista.Count; i++)
            {
                InsertV = InsertV + " Insert into @PreAsignacion(IdObjetoCarga ,VIN,Solicitud,KM, Vunidad )" +
                       " values(" + lsLista[i].IdObjetoCarga + ",'" + lsLista[i].VIN + "','" + lsLista[i].solicitud + "'," +
                       " (SELECT NK.KmCliente " +
                       "  FROM mar_SolicitudDetalle SD " +
                       "  inner join mar_NodrizaKms NK on SD.IdDestino = NK.IdDestino and SD.IDRemitente=NK.IdCliente and SD.IdDestinatario=NK.IdCteAgencia " +
                       "  WHERE 1=1 " +
                       "  and SD.IDSolicitud= '" + lsLista[i].solicitud + "'" +
                       "  and NK.IdOrigen= '" + IdCiudadUsuario + "' " +
                       "  and SD.IdObjetoCarga=" + lsLista[i].IdObjetoCarga + " )" +
                       ",'" + lsLista[i].VUnidad + "') ";
            }


            var lsUnidad = ((from s in lsLista select s.VUnidad).Distinct()).ToList(); 
            string ConsultaR = string.Empty;
            for (int i = 0; i < lsUnidad.Count; i++)
            {
                ConsultaR = ConsultaR + " Insert into @sugRampa (IdObjetoCarga ,VIN,Solicitud,KM, Vunidad,Rampa ) " +
                            " Select IdObjetoCarga ,VIN,Solicitud,KM, Vunidad, DENSE_RANK() OVER (ORDER BY km,IdObjetoCarga ) as Ramp " +
                            " From @PreAsignacion " +
                            " where Vunidad=" + lsUnidad[i];
            }
            string sqlRampas =
            sqlTablas + InsertV + ConsultaR +
                " Select sg.Solicitud,SG.IdObjetoCarga,SG.VIN,SG.Vunidad,RN.Rampa " +
                " From @sugRampa SG " +
                " Inner join mar_RampaNodriza RN on SG.Rampa= RN.IdRampa " +
                " Order by Vunidad,Rn.Rampa ";

    todo este codigo es el q kiero ejecutar en sql pero desde visualstudio 2012 alguein podria ayudarme porfavor y gracias 


    • Editado ICR Marva martes, 9 de febrero de 2016 2:43
    martes, 9 de febrero de 2016 2:42

Respuestas

  • lo mas recomendable seria hacer un SP y luego ejecutarlo en VS, pero si lo que queres es poner todo el query en VS entonces podias poner todo eso en un StringBuilder

    con SP seria ago asi

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString);
                    DataTable dt = new DataTable();
                    SqlDataAdapter da = new SqlDataAdapter("sp_UsuarioLogin_sel", conn);
                    da.SelectCommand.CommandType = CommandType.StoredProcedure;
                    da.Fill(dt);
    con StringBuilder seria algo asi
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString);
                    DataTable dt = new DataTable();
                    conn.Open();
                    StringBuilder sb = new StringBuilder();
                    sb.Append("query");
                    sb.Append("mas query");
                    SqlDataAdapter da = new SqlDataAdapter(sb.ToString(), conn);
                    da.Fill(dt);



    Att. Franklin Andino


    • Editado Franklin Andino martes, 9 de febrero de 2016 4:21
    • Marcado como respuesta ICR Marva jueves, 11 de febrero de 2016 15:47
    martes, 9 de febrero de 2016 4:15

Todas las respuestas

  • lo mas recomendable seria hacer un SP y luego ejecutarlo en VS, pero si lo que queres es poner todo el query en VS entonces podias poner todo eso en un StringBuilder

    con SP seria ago asi

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString);
                    DataTable dt = new DataTable();
                    SqlDataAdapter da = new SqlDataAdapter("sp_UsuarioLogin_sel", conn);
                    da.SelectCommand.CommandType = CommandType.StoredProcedure;
                    da.Fill(dt);
    con StringBuilder seria algo asi
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString);
                    DataTable dt = new DataTable();
                    conn.Open();
                    StringBuilder sb = new StringBuilder();
                    sb.Append("query");
                    sb.Append("mas query");
                    SqlDataAdapter da = new SqlDataAdapter(sb.ToString(), conn);
                    da.Fill(dt);



    Att. Franklin Andino


    • Editado Franklin Andino martes, 9 de febrero de 2016 4:21
    • Marcado como respuesta ICR Marva jueves, 11 de febrero de 2016 15:47
    martes, 9 de febrero de 2016 4:15
  • Te propongo un par de soluciones más elegantes en Visual Studio que andar concatenando con "+" (o con un StringBuilder) todos los pedacitos de la sentencia. Primero escribe todo tu SQL en SSMS y pruébalo para cerciorarte de que funcione. Después, copia el bloque entero, y pégalo en Visual Studio dentro de una cadena precedida de @:

    string sql = @"(pega aquí todo el SQL)";

    Eso funcionará aunque ocupe muchas líneas separadas, no hace falta escribir cada una de las líneas entre "" y luego sumarlas. Así es más fácil de mantener si necesitas añadir o quitar algo en el SQL.

    La otra alternativa es añadir al proyecto un archivo .resx. Después pegas el SQL en uno de los strings del resx (funciona perfecto aunque tenga cientos de líneas), y cuando vayas a ejecutarlo con el  SqlCommand  simplemente le pasas como texto de la sentencia el nombre del string dentro del archivo de recursos.

    martes, 9 de febrero de 2016 6:20
  • Gracias fue el metodo que ocupe y todo funciono bien 
    jueves, 11 de febrero de 2016 15:48