MySqlUtil - MySQL 的 TableAdapters






4.59/5 (7投票s)
2006 年 7 月 26 日
3分钟阅读

71534

2088
生成 MySQL 数据库的类型化数据集和 TableAdapters 的程序
引言
该程序读取 MySql informational_schema 数据库,并在用户选择了目标数据库后,创建一个包含类型化数据集和 TableAdapter 类的 C# 源代码文件,用于包含的表。
生成的代码与为 SQL 数据库生成的代码类似,但它不包括
- XML 序列化
- 设计器代码
在生成代码之前,程序会显示它将要使用的基本标识符的名称,让用户有机会更改它们(MySql 似乎不区分大小写,表名如 'CustomerOrders' 似乎存储为 'customerorders')。
一旦输入了这些参数,就可以将它们保存到文件(扩展名为 .tds)中,并在下次运行该程序时使用上面显示的按钮加载它们。
背景
我开发它的原因是我当时正在使用 SQL Server Express,并想改为使用 MySql(我相信它更容易部署),但仍然使用我开发的基本程序结构(即使用 DataDesigner 开发的 TableAdapters)。
当更改数据库并不断丢失我添加的存储过程时,我也觉得 DataDesigner 有点麻烦。
您可能会发现我在 TableAdapters 中使用的 SQL 有点不足(我知道这并不是我最强的属性),但想法是您可以根据自己的需要进行更改。
MySql Connector Net
该程序使用从 MySql 站点 下载的 MySql Connector Net 1.0.7。然而,这个版本似乎停留在时间扭曲中,并且缺少一些功能。
下载的解决方案包含此代码的修改版本 (MySql Connector Net SE),它添加了以下内容
- 对无符号数值类型的支持
- bit MySql 类型
- text MySqlType
这并非旨在成为对代码的明确更改,它只是反映了我为满足我的需求而进行的更改。 下载的程序引用此版本,但如果您愿意,可以引用官方版本。 我发现调试它的最简单方法是将项目包含在 MySqlUtil 解决方案中(就像下载的代码一样),当程序由于未知类型而崩溃时对其进行调试。
使用代码
- 启动程序并输入管理用户和密码(即可能是 root),然后单击 Connect 按钮。
- 连接后,从下拉组合框中选择目标数据库。
程序应该做它的事情并返回表格(如上所示),详细说明它将对数据集做什么。 - 对默认值进行任何更改。 单击 目录 文本框,将弹出一个用于输出文件的目录对话框。
- 单击 生成类型化数据集 按钮,将生成代码文件。
- 单击 保存参数 按钮会将连接信息和类名等保存到文件中。 然后,将来程序启动时,单击 加载参数 按钮将弹出一个打开文件对话框,该对话框将允许加载之前保存的信息。
生成的代码
代码生成(某种程度上)遵循 DataDesigner 为 Microsoft SQL Server 生成的代码。
使用上面的示例,生成的一些示例代码是
public partial class SampleDataSet : System.Data.DataSet
namespace SampledbDataSetData
{
#region SampleDataSet Definition
public partial class SampleDataSet : System.Data.DataSet
{
CustomersDataTable tableCustomers;
OrdersDataTable tableOrders;
DataRelation relationFK_Orders_Customers;
DataRelation relationFK_Orders_Products;
ProductsDataTable tableProducts;
....etc
// ***************************************************************
// * CustomersDataTable
// ***************************************************************
public partial class CustomersDataTable : System.Data.DataTable
{
public CustomersRow AddCustomersRow
(
uint customerID,
string customerCode,
string customerName,
bool isActive )
{
CustomersRow rowCustomers = NewCustomersRow();
rowCustomers.ItemArray = new object[]
{
customerID,
customerCode,
customerName,
isActive
};
AddCustomersRow ( rowCustomers );
return rowCustomers;
}
....etc
public class CustomersTableAdapter : SampledbDataSetTableAdapter
{
public CustomersTableAdapter ( string cs ) : base ( cs )
{
InitCommands ();
InitAdapter ();
}
public virtual int Insert
(
uint customerID,
string customerCode,
string customerName,
bool isActive )
{
Adapter.InsertCommand.Parameters[0].Value = 0;
Adapter.InsertCommand.Parameters[1].Value = (string) customerCode;
Adapter.InsertCommand.Parameters[2].Value = (string) customerName;
Adapter.InsertCommand.Parameters[3].Value = (bool) isActive;
ConnectionState previousConnectionState =
Adapter.InsertCommand.Connection.State;
if (((Adapter.InsertCommand.Connection.State &
ConnectionState.Open) != System.Data.ConnectionState.Open))
Adapter.InsertCommand.Connection.Open();
try
{
int returnValue = Adapter.InsertCommand.ExecuteNonQuery();
MySqlCommand cmd = new MySqlCommand("SELECT last_insert_id()",
Connection );
returnValue = (int) ((long) cmd.ExecuteScalar ());
return returnValue;
}
finally
{
if ((previousConnectionState == ConnectionState.Closed))
Adapter.InsertCommand.Connection.Close();
}
}
....etc
示例程序
示例程序使用上图所示的数据库。 要使用它,需要从提供的 SQL 文本文件创建 sample 数据库。
扩展生成的代码
您可以通过将代码添加到您的一个项目文件中,将您自己的代码添加到生成的代码中,而无需更改 MySqlUtil,如下所示
namespace SampleDataSetData.SampleDataSetTableAdapters
{
public partial class CustomerTableAdapter
{
public int ExecuteSP ( string ccode, string cname, bool active )
{
...... etc
}
}
}
历史
- 2006 年 7 月 - 初始发布
- 2006 年 7 月 31 日 - 更新下载