使用ObjectDataSources的MySQL 5 C#示例代码






4.33/5 (27投票s)
一个简单的示例,使用 MySQL 5 和存储过程以及 ASP.NET 2.0 中的 ObjectDataSources 和泛型。
引言
我创建此示例是因为我找不到在 ASP.NET 2.0 中使用带有 ObjectDataSources 的 MySQL 5 的简单解释。
我想说,我对 MySQL 印象深刻。 我可以在我的 Windows XP 机器上轻松安装它,并在大约一个小时内运行它。 我是 MS SQL 的长期用户,并且对尝试使用 Oracle 和 Firebird 感到非常沮丧。 我意识到,问题是我被 MS SQL Server 宠坏了,但是嘿,我很忙,我喜欢易于使用的工具:)
如果您刚开始使用 MySQL 和 ASP.NET,那么我推荐以下步骤
- 转到MySQL 网站,下载并安装“当前版本(推荐)”。
- 下载并安装:MySQL Administrator(用于管理您的 MySQL 服务器,第一次下载仅安装服务器)。
- 下载并安装:Connector/Net 1.0(您需要它才能让您的 ASP.NET 页面与您的 MySQL 服务器对话)。
- 您还可以下载:MySQL Query Browser – (一个图形客户端,用于处理您的 MySQL 数据库并运行查询)。
- 阅读并遵循本指南:使用 MySQL 与 ASP.NET 的分步指南。
使用代码
安装代码
- 您必须启动并运行 MySQL 5。
- 安装 MySQL Connector/Net 1.0。
- 创建一个名为 Test 的 MySQL 5 数据库。
- 在该数据库中创建一个名为 Message 的表
CREATE TABLE test.message ( Entry_ID INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, Name VARCHAR(45), Email VARCHAR(45), Message VARCHAR(200), PRIMARY KEY (Entry_ID) ) AUTO_INCREMENT=32 CHARACTER SET latin1 COLLATE latin1_swedish_ci;
- 在 Test 数据库中创建以下四个 MySQL 存储过程
PROCEDURE `test`.`DeleteMessage`(IN param1 INT) BEGIN Delete From test.message WHERE Entry_ID = param1; END
PROCEDURE `test`.`InsertMessage`(IN param1 VARCHAR(50), IN param2 VARCHAR(50), IN param3 VARCHAR(200)) BEGIN INSERT INTO message(Name, Email, Message) VALUES(param1,param2,param3); END
PROCEDURE `test`.`ShowAll`() BEGIN SELECT message.Entry_ID, message.Name, message.Email, message.Message FROM test.message; END
PROCEDURE `test`.`UpdateMessage`(IN paramkey INT, IN param1 VARCHAR(50), IN param2 VARCHAR(50), IN param3 VARCHAR(200)) BEGIN UPDATE message SET Name = param1, Email = param2, Message = param3 WHERE (message.Entry_ID = paramkey); END
- 解压缩“MySQL”并配置 IIS 以指向它。 确保您配置 Web 服务器以使用 ASP.NET 2.0。
- 打开“web.config”并更改该行
<add name="MySQLConnectionString" connectionString="server=localhost; user id=myuser; password=mypass; database=test; pooling=false;" providerName="MySql.Data.MySqlClient"/>
连接到您的 MySQL 数据库。
- 通过 IIS 浏览到default.aspx页面。
这是使用泛型来提供ObjectDataSource
控件使用的数据的类
using System;
using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
using System.Configuration;
using System.ComponentModel;
[DataObject(true)]
public static class MessagesDB
{
private static string GetConnectionString()
{
return ConfigurationManager.ConnectionStrings
["MySQLConnectionString"].ConnectionString;
}
[DataObjectMethod(DataObjectMethodType.Select)]
public static List<MessageItem> GetMessages()
{
MySqlCommand cmd = new MySqlCommand("ShowAll",
new MySqlConnection(GetConnectionString()));
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection.Open();
MySqlDataReader dr =
cmd.ExecuteReader(CommandBehavior.CloseConnection);
List<MessageItem> MessageItemlist = new List<MessageItem>();
while (dr.Read())
{
MessageItem MessageItem = new MessageItem();
MessageItem.Entry_ID = Convert.ToInt32(dr["Entry_ID"]);
MessageItem.Message = Convert.ToString(dr["Message"]);
MessageItem.Name = Convert.ToString(dr["Name"]);
MessageItem.Email = Convert.ToString(dr["Email"]);
MessageItemlist.Add(MessageItem);
}
dr.Close();
return MessageItemlist;
}
[DataObjectMethod(DataObjectMethodType.Insert)]
public static void InsertMessage(MessageItem MessageItem)
{
MySqlCommand cmd = new MySqlCommand("InsertMessage",
new MySqlConnection(GetConnectionString()));
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new MySqlParameter("param1", MessageItem.Name));
cmd.Parameters.Add(new MySqlParameter("param2", MessageItem.Email));
cmd.Parameters.Add(new MySqlParameter("param3", MessageItem.Message));
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
}
[DataObjectMethod(DataObjectMethodType.Update)]
public static int UpdateMessage(MessageItem MessageItem)
{
MySqlCommand cmd = new MySqlCommand("UpdateMessage",
new MySqlConnection(GetConnectionString()));
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new MySqlParameter("paramkey", MessageItem.Entry_ID));
cmd.Parameters.Add(new MySqlParameter("param1", MessageItem.Name));
cmd.Parameters.Add(new MySqlParameter("param2", MessageItem.Email));
cmd.Parameters.Add(new MySqlParameter("param3", MessageItem.Message));
cmd.Connection.Open();
int i = cmd.ExecuteNonQuery();
cmd.Connection.Close();
return i;
}
[DataObjectMethod(DataObjectMethodType.Delete)]
public static int DeleteMessage(MessageItem MessageItem)
{
MySqlCommand cmd = new MySqlCommand("DeleteMessage",
new MySqlConnection(GetConnectionString()));
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new MySqlParameter("param1", MessageItem.Entry_ID));
cmd.Connection.Open();
int i = cmd.ExecuteNonQuery();
cmd.Connection.Close();
return i;
}
上面的类使用“MessageItem
”类来在ObjectDataSource
控件之间传递参数
using System;
public class MessageItem
{
int _Entry_ID;
string _Message;
string _Name;
string _Email;
public MessageItem()
{
}
public int Entry_ID
{
get
{
return _Entry_ID;
}
set
{
_Entry_ID = value;
}
}
public string Message
{
get
{
return _Message;
}
set
{
_Message = value;
}
}
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
}
public string Email
{
get
{
return _Email;
}
set
{
_Email = value;
}
}
}
这是包含ObjectDataSource
控件以及用于编辑数据的GridView
和用于插入记录的DetailsView
的.aspx文件
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
TypeName="MessagesDB" OldValuesParameterFormatString="original_{0}"
SelectMethod="GetMessages" DataObjectTypeName="MessageItem"
DeleteMethod="DeleteMessage" InsertMethod="InsertMessage"
UpdateMethod="UpdateMessage">
</asp:ObjectDataSource>
<br />
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
DataSourceID="ObjectDataSource1"
DataKeyNames="Entry_ID">
<Columns>
<asp:BoundField DataField="Entry_ID" HeaderText="Entry_ID"
SortExpression="Entry_ID" Visible="False" />
<asp:CommandField ShowEditButton="True" />
<asp:CommandField ShowDeleteButton="True" />
<asp:BoundField DataField="Name"
HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="Email"
HeaderText="Email" SortExpression="Email" />
<asp:BoundField DataField="Message"
HeaderText="Message" SortExpression="Message" />
</Columns>
</asp:GridView>
<br />
<strong><span style="text-decoration: underline">
Insert New Record:</span></strong><br />
<asp:DetailsView ID="DetailsView1" runat="server"
AutoGenerateRows="False" BorderStyle="None"
CellSpacing="5" DataSourceID="ObjectDataSource1"
DefaultMode="Insert" GridLines="None"
Height="50px" Width="300px">
<Fields>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Email" HeaderText="Email" />
<asp:BoundField DataField="Message" HeaderText="Message" />
<asp:CommandField ButtonType="Button"
ShowInsertButton="True" ShowCancelButton="False" />
</Fields>
</asp:DetailsView>
注意
程序集“MySql.Data.dll”位于“/bin”目录中,因此“MySql.Data.MySqlClient
”可以工作。
希望这有帮助!