SqlClientCoreTool es una pequeña biblioteca de clases, tal vez con un nombre demasiado grande. Pero es eso, una herramienta para interactuar con facilidad entre Sql y .Net Core. Ligera, para proyectos que no exijan la rimbombancia de algún ORM o la con el tiempo pesada carga de mantener procedimientos almacenados. A continuación algunos ejemplos de cómo trabajar con la biblioteca.
Operaciones CRUD
private static string ConnectionString { get { return "Data Source=(local);Initial Catalog=SQLCCTool ;Integrated Security=true"; } } static void Main(string[] args) { DataGather dataGather = DataGather.GetInstance(ConnectionString); IEnumerable<Test> tests = dataGather.Get<Test>(); }
Puede utilizar Insert o InsertAsync. Si la tabla se llama igual que la clase no será necesario especificar su nombre.
private async Task<int> InsertTestAsync(Test test) { DataGather dataGather = DataGather.GetInstance(ConnectionString); //You only have to specify the name of the table if //it is different from the class or its plural return await dataGather.InsertAsync(test, "tableName"); }
La misma ejecutiva funcionará con Update y UpdateAsync…
private async Task<int> UpdateTestAsync(Test test) { DataGather dataGather = DataGather.GetInstance(ConnectionString); return await dataGather.UpdateAsync(test); }
También puede ejecutar queries de T-SQL para obtener o modificar datos.
private List<Test> GetTestList() { DataGather dataGather = DataGather.GetInstance(ConnectionString); return dataGather.Get<Test>("SELECT * FROM TEST", false).ToList(); }
private string GetTestName(int testId) { DataGather dataGather = DataGather.GetInstance(ConnectionString); return dataGather.GetSingleValue($"SELECT name FROM TEST WHERE id ={testId} ", false) .ToString(); }
Tranformer
La clase Utils.Transformer implementa métodos para convertir conjuntos de datos de un formato a otro.
BlobFile para guardar imágenes y documentos
En el espacio de nombres SQLClientCoreTool.Classes podemos encontrar la clase BlobFile. Ésta nos permitirá convertir cualquier archivo: documento, imagen, etc (recomendado para archivos menores de 256 kb) en formato varbinary(Max).
private async Task<int> InsertBlobImageAsync(string imagePath) { BlobFile blobFile = Transformer.CreateBlobFile(imagePath); DataGather dataGather = DataGather.GetInstance(ConnectionString); return await dataGather.InsertAsync(blobFile); }
Utils
El espacio de nombres Utils nos da algunas posibilidades extras para trabajar con nuestras bases de datos.
SessionLog
La clase SCCT_SessionLog y el grupo de métodos de SessionLog permiten crear una tabla en la base de datos donde almacenar variables de sesión.
Si los datos proporcionados para la conexión tienes suficientes privilegios, la tabla se creará por sí sola al invocar el método Utils.SessionLog.Insert(…) o el método asíncrono de nombre semejante. En caso contrario, puede crear la tabla al ejecutar el siguiente script.
CREATE TABLE [SCCT_SessionLog] ( [id] int not null primary key identity(1,1), [key] varchar(50) not null, [value] varchar(500) not null , [recordDate] datetime default(getdate()) not null , [expirationDate] datetime null, [active] bit not null, [rowUpdateDate] datetime not null )
De la sigiente manera podemos hacer las dos únicas operaciones válidas sobre esta tabla, insertar y leer. El borrado se hará semi automático. Cada vez que se acceda a ella se eliminarán los registros en los que la fecha de expiración es menor que la fecha actual.
//key = "bookedRoom", value = "JohnDoeId" private async Task<int> InsertSessionLogAsync(string key, string value ) { SessionLog sessionLog = SessionLog.GetInstance(ConnectionString); // The sessionLog will be saved in a table named SCCT_SessionLog. // If table doesn't exists we will attempt to create. return await sessionLog.InsertAsync(key, value, Period.One_Week); }
//key = "bookedRoom" private async Task<IEnumerable<SCCT_SessionLog>> GetSessionLogAsync(string key) { SessionLog sessionLog = SessionLog.GetInstance(ConnectionString); // Every get an insert deletes rows where expriationDate < now return await sessionLog.GetAsync(key); }