在现代软件开发中,数据库交互是不可或缺的一部分。无论是加载数据块、转换数据还是将其推送到不同的地方,或是应用过滤器并保存更改,几乎所有的业务开发者都会在某个时刻执行这些步骤的某种变体。然而,实现这些步骤的方式似乎过于多样化。例如,.NET提供了功能强大的System.Data.SqlClient命名空间来处理SQL Server交互的需求,但它的底层实现对来说过于复杂,需要大量的设置才能开始工作。
为了简化这一过程,开发了一个名为SQLMagic的工具。SQLMagic的诞生初衷是为了让能够专注于编写查询,一次编写,然后在应用程序中重复使用,而不需要花费太多时间设置应用程序环境以与SQL Server交互。
SQLMagic最初是一个小型项目,旨在简化C#代码,使能够专注于编写查询,然后将它们放入应用程序中执行,而无需进行复杂的设置。SQLMagic的目标是简单明了,它应该能够处理需要的任何事情,而不会抛出SQL Server通常会返回的异常之外的任何问题。
SQLMagic的使用非常简单,这正是它的设计初衷。以下是一些基本用法示例:
var nTimeout = 30; // 设置超时时间为30秒
var bLog = true; // 开启日志记录
var oSql = new Sql("connectionString", nTimeout, bLog); // 创建SQLMagic实例
SqlResultWithDataSet oResult = oSql.Open("SELECT * FROM tbl"); // 执行查询并返回DataSet
此外,SQLMagic还支持使用参数的查询,这有助于提高查询的安全性和灵活性:
oResult = oSql.Open("SELECT * FROM tbl WHERE tbl_id = @id", CommandType.Text, new SqlParameter("id", 100));
SQLMagic还支持执行存储过程和获取返回值:
var datetime = oSql.Execute("SELECT GETDATE()");
var intBack = oSql.Execute("SELECT 1");
var intBackAgain = oSql.Execute("sp_GiveNumber", CommandType.StoredProcedure);
SQLMagic不仅支持基本的数据库操作,还提供了一些高级功能,如异步支持和事务管理。以下是一些高级用法示例:
var oResult = await oSql.OpenAsync("SELECT * FROM aVeryLargeTable");
var nValue = await oSql.ExecuteAsync("SELECT bigNumberComputationThatResultsInInteger");
var nProcedure = await oSql.ExecuteAsync("sp_LongRunningProcedure", CommandType.StoredProcedure);
SQLMagic还支持手动创建连接和使用事务:
SqlTransaction oTransaction = oSql.BeginTransaction();
oSql.Open(oStatement, oTransaction.Connection, false, oTransaction);
oSql.EndTransaction(oTransaction, true); // true表示提交事务,false表示回滚事务
SQLMagic仍在不断进化中,计划为其添加更多功能,如Fluent-like接口和观察者类,以记录命令和连接活动。此外,SQLMagic可能会进行一些破坏性更改,以整合新功能或标准化命名空间。