martes, 16 de mayo de 2017

Obtener columnas del resultado de un store en un DataTable



En algunas ocasiones necesitamos tener el resultado de las columnas en una lista de objeto u arreglo, para ello lo realizamos de la siguiente manera.


     foreach (DataColumn oDataColumn in oObj.Columns)
        {
            string Columna = oDataColumn.ColumnName;
             
            oLista.Add(Columna);
        }



Slds

Leer archivos de excel desde un directorio de manera dinamica


Aquí después de un tiempo, en esta ocasión vamos a ver como leer archivos (excel )desde .NET y poder recorrer las hojas de manera dinámica.


Por ejemplo vamos a recorrer todos los archivos que hay en esta ruta y lo guardamos en una colecciòn.

 DirectoryInfo di2 = new DirectoryInfo(@"\\192.168.1.111\Carpeta\SubCarpeta");


ObjetoPrint oObjetoPrint = new Migrar.ObjetoPrint();
                List<ObjetoPrint> oListaObjetoPrint = new List<Migrar.ObjetoPrint>();


    foreach (var fi in di2.GetFiles())
                {
                    // Console.WriteLine(fi.Name);
                    oObjetoPrint = new Migrar.ObjetoPrint();
                    oObjetoPrint.FechaCreacion = fi.CreationTime;
                    oObjetoPrint.NombreArchivo = fi.Name.ToString();
                    oListaObjetoPrint.Add(oObjetoPrint);
                }



  string[] Hojas = GetExcelSheetNames(Ruta);

Con este metodo vamos a obtener las hojas del archivo que deseamos.

Aqui leemos el contenido de una hoja en especifico.

oObject = GetDataExcel(Ruta, Hojas[0]);

Este resultado podemos migrarlo a un temporal.

Slds


     // Establishing connection
                SqlConnectionStringBuilder cb = new SqlConnectionStringBuilder();
                    cb.DataSource = "192.168.1.111";
                    cb.InitialCatalog = "TUBD";
                    cb.IntegratedSecurity = true;
                    SqlConnection cnn = new SqlConnection(cb.ConnectionString);

                 

                    // Initializing an SqlBulkCopy object
                    SqlBulkCopy sbc = new SqlBulkCopy("server=192.168.4.111;database=TUBD;Integrated Security=SSPI");

                    // Copying data to destination
                    sbc.DestinationTableName = "TEMP";
                    sbc.WriteToServer(oObject);



  private static String[] GetExcelSheetNames(string excelFile)
        {
            OleDbConnection objConn = null;
            System.Data.DataTable dt = null;

            try
            {
                // Connection String. Change the excel file to the file you
                // will search.
                String connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                    "Data Source=" + excelFile + ";Extended Properties=Excel 8.0;";
                // Create connection object by using the preceding connection string.
                objConn = new OleDbConnection(connString);
                // Open connection with the database.
                objConn.Open();
                // Get the data table containg the schema guid.
                dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                if (dt == null)
                {
                    return null;
                }

                String[] excelSheets = new String[dt.Rows.Count];
                int i = 0;

                // Add the sheet name to the string array.
                foreach (DataRow row in dt.Rows)
                {
                    excelSheets[i] = row["TABLE_NAME"].ToString();
                    i++;
                }

                // Loop through all of the sheets if you want too...
                for (int j = 0; j < excelSheets.Length; j++)
                {
                    // Query each excel sheet.
                }

                return excelSheets;
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
                // Clean up.
                if (objConn != null)
                {
                    objConn.Close();
                    objConn.Dispose();
                }
                if (dt != null)
                {
                    dt.Dispose();
                }
            }
        }



      static public DataTable GetDataExcel(
  string fileName, string sheetName)
        {
            try
            {
                string connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                     "Data Source =" + fileName + ";Extended Properties=Excel 8.0";


                using (OleDbConnection cnn = new OleDbConnection(connString))
                {
                    OleDbCommand cmd = cnn.CreateCommand();
                    // cmd.CommandText = string.Format("SELECT * FROM [{0}]", sheetName);

                    //cmd.CommandText = "SELECT * FROM [{0}]";
                    cmd.CommandText = string.Format("SELECT * FROM [{0}]", sheetName);
                    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                    DataTable dt = new DataTable();

                    da.Fill(dt);

                    return dt;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

lunes, 3 de abril de 2017

Se excedió la longitud de solicitud máxima.

Se excedió la longitud de solicitud máxima.


Cuando tengamos este mensaje de error, principalmente debemos de configurar en el web.config en las siguientes etiquetas.


 <customErrors mode="Off" />

 <httpRuntime appRequestQueueLimit="99100" useFullyQualifiedRedirectUrl="true" maxRequestLength="2097151" requestLengthDiskThreshold="8192" executionTimeout="9990000" />


   <pages validateRequest="false">
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <!--<add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>-->
      </controls>
    </pages>





<security>
      <requestFiltering>

        <requestLimits maxAllowedContentLength="4294583648"/>

      </requestFiltering>
    </security>
  

miércoles, 29 de marzo de 2017

Restaurar BD desde transact

ALTER DATABASE [TUBD]
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE

RESTORE DATABASE TUBD FROM DISK = N'C:\TUBD001.bak' WITH replace
GO