C# 数据库实用工具
一系列用 C# 编写的用于查找和数据操作的数据库实用工具
引言
在开发文档库系统(品牌为#Calchas)的过程中,我需要频繁地查询数据库以获取少量信息。这意味着每次访问数据时,我都需要插入许多行代码才能从数据库中获取单个值。
因此,我决定开发一个数据库工具类,以简化和加速这项重复性任务。我的编码生涯始于 Access 的 VBA,因此方法名称也沿用了当时的习惯。
我希望这些工具对其他 C# 开发者有所帮助。请随时留下您的评论,我**欢迎**建设性的批评。
先决条件 - 工具使用说明
如果您选择不修改代码而直接使用提供的 DLL,则应在项目设置中包含一个名为 ConnectionString
的设置,其中包含指向您的 SQL 数据库的连接字符串。请注意,该代码已在 Microsoft SQL Server 上进行了测试,如果您选择使用其他数据源,则应验证连接性(并向我发送反馈!)。
另一方面,如果您倾向于使用自己的连接方法,则应更改 GetConnectionString
方法的代码,以您认为合适的方式检索您的连接字符串。
请注意,如果您选择使用 SQLConnection
以外的连接类型,则应同时在 ReadValue
和 ReadValues
方法中进行更改,因为这两者都在 public
方法中使用。
关于数据库设计,还有一个**重要说明**。所有表都应使用 Guid
作为主键,并且应包含一个整数(最好是 SQL longinteger
)字段,名为 AutoNumber
,用于编号记录(应将标识设置为 Yes
)。此外,您还需要包含一个名为 User
的 Guid
字段,其中包含添加记录到数据库的用户的用户 ID。我还使用了一个 RegDate
字段(类型为 SmallDateTime
),它由 SQL Server 填充,并添加记录插入的日期。
Using the Code
代码的使用非常直接。public
方法分为六个类别:
-
查找函数:包含查询数据库给定值的相关方法。此类别中包含的方法有:
DLookup
DMax
DMin
DFirst
DLast
DSum
DAverage
DCount
-
更新函数:包含更新数据库的方法。
-
插入函数:包含向数据库插入记录的方法。
-
删除函数:包含从数据库删除记录的方法。
-
DatabaseInfo 函数:包含一个
public
方法,用于从数据库检索表的第一个键字段的名称。它还将包含其他数据库信息方法,如表列表等。 -
直接访问函数:包含两个直接在数据库上执行 SQL 代码的方法。上述方法都是有用的通用过程,但通常需要更直接的方法!
关注点
我的主要问题是在开发过程中,如何创建一个通用的方法来从源应用程序读取连接字符串设置。由于我开发了一系列用于各种用途的 C# 数据库应用程序,因此我需要一个通用的工具类来访问或操作我的数据库。因此,需要直接处理包含应用程序设置的 XML 文件。
private static string GetConnectionString()
{
string connectionString = "";
XmlDocument xd = new XmlDocument();
xd.Load(Application.ExecutablePath + ".config");
XmlNodeList nodeList = xd.GetElementsByTagName("connectionStrings");
foreach (XmlNode node in nodeList)
{
XmlNode node2 = node.ChildNodes[0];
if (node2.Attributes[0].Value.EndsWith("ConnectionString"))
connectionString = node2.Attributes[1].Value;
}
return connectionString;
}
此外,事实证明,尽管这些方法提供了快速简便的方式来从 C# 使用数据库,但我仍然需要一种更通用的方式来访问我的数据。然后,我构建了两个方法,使我能够直接在数据库上执行 SQL 代码。
最后,开发接收记录主键 Guid
作为参数的查找方法意味着我必须找到一种方法来检索给定表的第一个键字段的名称。方法如下:
public static string GetKeyField(string tableName)
{
return ReadValue("(SELECT c.name AS COLUMN_NAME " +
"FROM sys.key_constraints AS k INNER JOIN " +
"sys.tables AS t ON t.object_id = k.parent_object_id INNER JOIN " +
"sys.index_columns AS ic ON ic.object_id = t.object_id AND " +
"ic.index_id = k.unique_index_id INNER JOIN " +
"sys.columns AS c ON c.object_id = t.object_id AND " +
"c.column_id = ic.column_id " +
"WHERE (t.name = N'" + tableName + "'))", "COLUMN_NAME").ToString();
}
我无法为检索数据库键的 SQL 代码承担全部功劳,因为我在网上找到它。如果有人能认出这段代码,请通过电子邮件告诉我来源,以便我能妥善注明。
历史
- 2007年12月30日:初始版本
期待大家的评论。