Cómo encontrar la cuenta bajo la cual corre SQL Server

El archivo mediante el cual se ejecuta el servicio de SQL Server es, normalmente, el siguiente:

C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\sqlservr.exe

Y normalmente la cuenta bajo la cual se ejecuta ese archivo es:

NT Service\MSSQLSERVER

Sin embargo, en ocasiones necesitamos asegurarnos de que estos datos son correctos, y puedes hacerlo ejecutando esta sentencia mediante SQL Server Management Studio:

SELECT DSS.servicename,
 DSS.startup_type_desc,
 DSS.status_desc,
 DSS.last_startup_time,
 DSS.service_account,
 DSS.is_clustered,
 DSS.cluster_nodename,
 DSS.filename,
 DSS.startup_type,
 DSS.status,
 DSS.process_id
 FROM sys.dm_server_services AS DSS;

La sentencia te regresará varios datos, entre los cuales se encuentran:

  • servicename. Es el nombre del servicio.
  • service_account. Es la cuenta bajo la cual correo el servicio.
  • filename. Es el archivo mediante el cual se ejecuta el servicio.

Encontrarás un registro tanto para el servicio “SQL Server (MSSQLSERVER)” como para el servicio “SQL Server Agent (MSSQLSERVER)”.

Cómo exportar la información de un GridView a Excel con EPPlus

En algunas ocasiones queremos que toda la información que estamos desplegando con un GridView se exporte automáticamente a un archivo de Excel desde nuestra aplicación ASP.NET 3.5 o superior.

Para hacerlo, basta colocar un GridView vacío en nuestra página (puede ser uno diferente al que utilizas para mostrar la información en HTML).

<asp:GridView ID="GridViewExcel" runat="server">
</asp:GridView>

También necesitamos un botón que al ser presionado haga la exportación:

<asp:LinkButton ID="ExportarAExcel" runat="server">Exportar a Excel</asp:LinkButton>

Necesitamos utilizar la librería EPPlus. Solamente descárgala y coloca los archivos EPPlus.dll y EPPlus.XML en la carpeta Bin de tu proyecto.

Por último, aquí está el código que hace la exportación:

Protected Sub ExportarAExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ExportarAExcel.Click
   Dim gv As GridView
   'Estoy obteniendo la información de mi Business Logic Layer, pero lo puedes hacer
    'de la manera en la que estés acostumbrado
    Dim Logica As New BLLUsers()
    Dim DTable As DSEmpresa.usersDataTable
    DTable = Logica.GetData()
    gv.DataSource = DTable
    gv.DataBind()
 
   Dim excelPackage = New ExcelPackage
   Dim excelWorksheet = excelPackage.Workbook.Worksheets.Add("Hoja 1")
   excelWorksheet.Cells("A1").LoadFromDataTable(Dset, True)
   Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
   Response.AddHeader("content-disposition", "attachment;  filename=UsuariosExportados.xlsx")
   Dim stream As MemoryStream = New MemoryStream(excelPackage.GetAsByteArray())
   Response.OutputStream.Write(stream.ToArray(), 0, stream.ToArray().Length)
   Response.Flush()
   Response.Close()    
 
End Sub
 
 
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
    'Este override debe estar aqui ya que si no aparecera un error
    'indicando que el Gridview debe estar dentro de un form runat=server
End Sub

Y listo, con eso podrás exportar tu información a Excel.

Éste método funciona mejor que el viejito que había escrito aquí.

Encuentra por qué tu ModelState.IsValid está marcando falso

Tenía un código similar a éste en un controlador:

if (ModelState.IsValid)
{
   //…algo
}
else
{
   //…otra cosa
   return View(cefuVM);
}

Cada vez que se ejecutaba ese código, mi “ModelState.IsValid” era falso y se iba a la parte del “else”, sin marcar ningún error aparentemente.

Para ver qué está pasando, añade esta línea de código en la parte del “else”.

if (ModelState.IsValid)
{
   //…algo
}
else
{
   var errors = ModelState.Select(x => x.Value.Errors)
   .Where(y => y.Count > 0)
   .ToList();
   //…otra cosa
   return View(cefuVM);
}

Coloca un “break” en Visual Studio y corre en modo “debug”. Analiza la variable “errors” en la ventanita “Locals” y verás algo similar a lo siguiente:

locals

Como puedes ver, ahí aparece el error que yo mismo programé en la validación de mi “ViewModel”.

Referencia.

Otro artículo relacionado.

Cómo eliminar los registros hijos relacionados de una tabla en Entity Framework

Supongamos que tienes una tabla llamada “Alumno” y otra llamada “Tarea”. La relación entre ellas es de uno a muchos, es decir, un alumno puede tener muchas tareas, y una tarea pertenece a un sólo alumno.

Ahora, supongamos que quieres eliminar todas las tareas del alumno con Id = 93 cuyo “ciclo” sea igual a 2015.

Podrías encontrar los registros relacionados e iterar en ellos realizando la eliminación de cada uno de ellos individualmente, pero hay una forma más rápida de hacerlo:

//Encontramos todos los registros que queremos eliminar
var alumno = context.Alumno.SingleOrDefault(a => a.AlumnoId == 93);
var tareasAEliminar = alumno.Tareas.Where(t => t.Ciclo == 2015);
//Eliminarlos de un sólo golpe
context.Tareas.RemoveRange(tareasAEliminar);

Listo, después de eso solamente guardas los cambios de tu contexto y en ese momento se eliminarán los registros.

Entity Framework intenta añadir un “1” después del nombre de una columna

En una “Web API” en la que estoy trabajando, estoy generando el modelo de una base de datos existente con “ADO.NET Entity Data Model” (los archivos que terminan en .edmx).

Al crear el modelo, seleccioné la opción “Include foreign key columns in the model”, y al querer guardar un registro, obtenía este error:

ExceptionMessage : Invalid column name 'MiEntidad_MiEntidadId1'

Como puedes ver, “Entity Framework” estaba intentando colocar un “1” al final del nombre de la llave foránea. Buscando en Internet encontré algo que me hizo intentar desmarcar la opción “Include foreign key columns in the model” y de esta forma se solucionó el problema.

Así que cuando crees tu modelo, hazlo así:

edmw

Con eso arreglas el problema.