`
ruilin215
  • 浏览: 1097051 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

准备使用MySQL与ASP.NET开发Web应用

阅读更多

最近准备用Mysql+.net作开发,看了三篇文章:

1)MySQL与ASP.NET配合更强大;

2)选择MySQL还是SQL Server;

3)MySQL和.Net2.0配合使用。

MySQL与ASP.NET配合更强大

由于富有竞争力的价格和易于使用,MySQL在市场占有率方面逐步提升。开放源代码社区为了扩展MySQL的使用范围,开发出了.Net框架(.NET Framework)中可以使用的数据库连接器。我们就来学习一下如何在.Net应用程序中使用MySQL。


  MySQL渐渐的成为了在选择数据库平台时一个切实可行的数据库方案。能够证明这一点的就是许多公司都选择mySQL作为他们的数据库平台,例如 Google、美联社(The Associated Press) 以及美国国家航空宇航局( NASA)。虽然对于一个开放源代码来说,低廉的价格常常被当作主要优点来说服客户,但是对于象Google那样的大规模的组织来说,他们不会放心的把非常有用的信息存放在一个只有价格优势的数据库产品中。MySQL真正的实力远远的超过了他的价格优势,他提供了丰富的来自开放源代码社区和商业化的附加工具。


  和.NET的数据整合

  MySQL 社区已经开发出了MySQL的数据接口,他提供了连接数据源和程序代码的基本功能。在Windows平台上,有如下的MySQL连接器:

  * MySQL Connector/Net 1.0 (之前被称为ByteFX.Data):是一个为MySQL设计的开放源代码.NET数据接口。它是完全用C#来开发的,我们可以在在 MySQL.com网站上找到它。(注意:在本文的例子中,我们都会使用MySQL Connector/Net 1.0这个数据接口来连接数据库,利用Windows安装程序即可轻易安装它,它的代码实例和文档也包含其中。)

  * MySQLDirect .NET Data Provider: 是一个由 Core Lab 开发的商业数据接口。他的价格由购买的许可证的类型决定,但是我们可以下载它的试用版。

  如果你使用 Mono,那么在 Mono网站上可以找到PHP连接器的下载。如果你在Windows平台上运行Mono的话,你下载的连接器包含了安装程序。如果不是的话,那就要根据你的操作系统的种类去下载合适的连接器了。

  使用MySQL数据接口

  安装好MySQL的数据接口后,你必须在你的代码中引入它才能使用。你可以使用 MySql.Data.MySqlClient这个名空间来连接 MySQL 服务器。在C#中,可以使用using语句来引入MySQL数据接口:

  using MySql.Data.MySqlClient;

  另外,你也可以在一个ASP.NET的网页表单(Web Form)中通过使用导入(Import)指令来引入MySQL数据接口:

  或者,你也可以在你的代码里在使用这个名空间时,写全一个类的完整路径,但是这样的话会比使用Import指令来导入输入更多的字符,浪费更多的字节。指定了名空间后,我们就可以和MySQL数据库进行数据交互了。 MySql.Data.MySqlClient这个名空间提供了许多用于处理MySQL数据的类。下面是这些类的一个样本:

  * MySqlConnection: 管理和 MySQL 服务器/数据库的连接;

  * MySqlDataAdapter: 一套用于填充DataSet对象和更新MySQL数据库的命令和连接的集合;

  * MySqlDataReader: 让你能够从一个 MySQL 数据库读取数据。它是一个单向的数据流;

  * MySqlCommand: 提供向数据库服务器发送指令的功能;

  * MySqlException: 当发生问题时提供例外处理。

  我们会使用其中的一些类去和我们的范例数据库进行数据交互。

  连接 MySQL 数据库

  使用MySQL数据库的第一步是要通过MySQLConnection类和数据库建立连接。通过一个连接字串,MySqlConnection 将会被实例化成一个示例。连接字符串将告诉代码到哪里去找MySQL服务器以及其他一些选项。

  一个连接字串告诉代码使用指定的用户名和密码去连接一个名为MySQLTestServer的MySQL服务器,并进入techrepublic数据库。我在我的测试机上设定了允许匿名登陆(这样的设定有非常大的安全漏洞,所以不建议你在生产服务器上也这么做),所以在范例中将会使用如下的连接字串:

  "server=localhost; database=sitepoint;"
 指定了连接字串后, MySqlConnection 对象的Open方法就被调用并打开连接。连接建立后,你就可以给MySQL数据库发送命令或从数据库获得数据了。

  ASP.NET和MySQL的组合

  让我们更深入的讨论一下结合MySqlConnection类和其他的类来生成一个MySQL服务器上的数据库列表。表 B列出了一个使用C#写的ASP.NET的网页表单。它建立了一个连接,接着给服务器下了一个指令(SHOW DATABASES),然后通过MySqlReader对象把结果显示出来。

  用 MySqlCommand 对象向MySQL服务器发送 SHOW DATABASES 命令和直接在 MySQL 管理工具中输入这个命令得结果是一样的。唯一的区别是,我们在代码中必须使用另一个对象来获取结果集。MySqlDataReader 对象在获取结果时被实例化(通过 MySqlCommand 类的 ExecuteReader 方法)。MySqlDataReader 对象的 GetString 方法被用于通过ASP.NET的标签控制来显示结果集中的数据。GetString 方法的指针0指定了显示结果集的当前行(在while循环中)的第一列数据。

  Mono提示
 如果你使用开放源代码的Mono开发平台,例子中的代码只需要做小小的改动就能正常的运行。MySQL的数据接口在 ByteFX.Data.MySqlClient 这个空间名里,而不是Windows上的MySql.Data.MySqlClient空间名。事实上 MySQL 的数据接口原来是由 ByteFX公司开发的,但是后被MySQL公司收购。所以如果你使用Mono的话,你必须这样声明空间名:

  using ByteFX.Data.MySqlClient;

  结语

  MySQL 和 .NET 的组合提供了一个强大的开发平台。MySQL在开源社区得到了强大的技术支持,.NET也通过 Mono 而被开放源代码社区所接受。这样的组合提供了一个在Windows,及其他语言如UNIX或Linux,环境下高度灵活的开发平台。


Mono ByteFX.Data 与 encoding
ByteFX.Data 是 MySQL 的 .Net Data Provider, 同时提供有 mono 与 Microsoft.Net 的版本(微软版本好像叫做 Connector/.Net).
这两天在试着用 mono 与 ByteFX.Data 来存取 MySQL 数据库.
但却发现中文的字符串在存入数据库之后,全部都变成问号了.
原本以为是我编码的处置或设定有问题,在经过 Trace mono 与 ByteFX.Data 的 source code 之后,才发现并不是.
我开始怀疑是 MySQL 的问题,我首先去问 Google 大神.
Google 大神告诉我,MySQL 在 4.0 以前并不支持 unicode, 数据库预设的编码是 latin1.
ok, 那么为什么使用 MediaWiki 或是一些 blog 却可以存入 unicode 的字符串??
又稍稍的 Trace 了 MediaWiki 的 source code, 并无惊人之处,也没有什么特别的处理,纯粹就是 insert, update 而已.

最后我再回头看 ByteFX.Data 的 source code, 终于找到问题所在.
ByteFX.Data 在丢封包到 MySQL 之前,会先依据 MySQL 的 encoding 进行编码.
所以不管怎么样,我在 client 怎么转码,到最后 ByteFX.Data 都会转成 latin1,再进行存入.是故,可能的解法如下:
1. 升级 MySQL 到 4.0 以后的版本.
2. 在丢数据库之前,先把字符串转为 byte[], 如果是 byte[], ByteFX.Data 就不会进行转码,而直接存入. 但这样在取出数据的时候,还需要再作一次工,将 byte[] 转回 string.
解法 2 相当费事,而且以后如果要更换数据库的时候,又会再受到一次冲击.
看来解法 1 才是王道. 但是,懒得升级说... =_=
http://cgi.blog.yam.com/trackback/566961

原文:http://www.keyusoft.cn/Contentview.aspx?year=2005&month=$10&day=$19&postid=128

选择MySQL还是SQL Server

对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式。

除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?在这二者之间你是如何选择的?让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它们的安全性。

根本的区别是它们遵循的基本原则
二者所遵循的基本原则是它们的主要区别:开放vs保守。SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。虽然你可以使用SQL服务器的Sybase引擎,但MySQL能够提供更多种的选择,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库。同时,MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能。

发行费用:MySQL不全是免费,但很便宜
当提及发行的费用,这两个产品采用两种绝然不同的决策。对于SQL服务器,获取一个免费的开发费用最常的方式是购买微软的Office或者Visual Studio的费用。但是,如果你想用于商业产品的开发,你必须还要购买SQL Server Standard Edition。学校或非赢利的企业可以不考虑这一附加的费用。

性能:先进的MySQL
纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。MyISAM 数据库与磁盘非常地兼容而不占用过多的CPU和内存。MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。因为MySQL在内部里很多时候都使用64位的整数处理。Yahoo!商业网站就使用MySQL作为后台数据库。

当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。但是,这些特性也要付出代价的。比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。

这两者数据库都能够在.NET或J2EE下运行正常,同样,都能够利用RAID。

安全功能

MySQL有一个用于改变数据的二进制日志。因为它是二进制,这一日志能够快速地从主机上复制数据到客户机上。即使服务器崩溃,这一二进制日志也会保持完整,而且复制的部分也不会受到损坏。

在SQL服务器中,你也可以记录SQL的有关查询,但这需要付出很高的代价。

安全性
这两个产品都有自己完整的安全机制。只要你遵循这些安全机制,一般程序都不会出现什么问题。这两者都使用缺省的IP端口,但是有时候很不幸,这些IP也会被一些黑客闯入。当然,你也可以自己设置这些IP端口。

恢复性:先进的SQL服务器
恢复性也是MySQL的一个特点,这主要表现在MyISAM配置中。这种方式有它固有的缺欠,如果你不慎损坏数据库,结果可能会导致所有的数据丢失。然而,对于SQL服务器而言就表现得很稳键。SQL服务器能够时刻监测数据交换点并能够把数据库损坏的过程保存下来。

根据需要决定你的选择
对于这两种数据库,如果非要让我说出到底哪一种更加出色,也许我会让你失望。以我的观点,任一对你的工作有帮助的数据库都是很好的数据库,没有哪一个数据库是绝对的出色,也没有哪一个数据库是绝对的差劲。我想要告诉你的是你应该多从你自己的需要出发,即你要完成什么样的任务?而不要单纯地从软件的功能出发。

如果你想建立一个.NET服务器体系,这一体系可以从多个不同平台访问数据,参与数据库的管理,那么你可以选用SQL服务器。如果你想建立一个第三方站点,这一站点可以从一些客户端读取数据,那么MySQL将是最好的选择。

原文:http://htm.winsteps.net/database/331.htm

MySQL和.Net2.0配合使用

MySql现在的最新版本是5.x.第一次接触它是在大二的时候,用php,那时好像还是4.x版本。

Mysql5增加很多新的功能,开始支持:存储过程、触发器、视图、信息架构视图等...

MySql在安装时一如既往的比较复杂,往往就是一个失败的提示,没有什么其它提示原因。


这是一篇文章,比较MySql和SqlServer的,http://htm.winsteps.net/database/331.htm

MySql中文网站http://www.mysql.cn/上资料很少,大多是些安装帮助。
要查资料还是去MySql的网站http://www.mysql.com/

MySql现在有提供的各种连接工具(http://dev.mysql.com/downloads/connector/),.net下可以用的有Connector/ODBC和Connector/Net。

ODBC连接效率可能稍低,最好还是用Net直接的连接
这篇文章介绍了各种连接方法http://www.mysql.com/news-and-events/press-release/release_2002_10.html

1:ODBC连接
现在的版本是3.51,安装之后,可以这样操作:
// string conStr = "DRIVER = {MySQL ODBC 3.51 Driver}; SERVER = localhost; DATABASE =test; UID = root; PASSWORD=;";

//string conStr = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;USER=root;PASSWORD=;OPTION=3;";
string conStr = "provider = MySQL ODBC 3.51 Driver; SERVER = localhost; DATABASE =test; UID = root; PASSWORD=;";

try
{
OleDbConnection connection = new OleDbConnection(conStr);
connection.Open();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
2:Net连接:
MySQL Connector Net 1.0.7:有net1.0;net.1;net2.0;mono1.0四个版本的connector。免费
CoreLab.MySql 3.5:这是个商业的版本,试用期30天。

下边的代码是使用MySQL Connector Net 的例子。注意:他的Parameter的前缀是“?”而不是“@”。这个问题比较特殊。CoreLab里面的Parameter的前缀就是“@”.
string connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false;port=3308", "localhost", "root", "", "test");
try
{
MySqlConnection myConn = new MySqlConnection(connStr);
myConn.Open();
MySqlCommand cmd = myConn.CreateCommand();

cmd.Parameters.Add("?DocName", MySqlDbType.VarChar, 50);
cmd.Parameters[0].Value = "test by code";
cmd.Parameters[0].SourceColumn = "DocName";
cmd.CommandText = "update t_docs set DocName=?DocName where DocId=4";
cmd.ExecuteNonQuery();
这是使用一个ORM时设置provider的例子
CustomProvider mysqlProvider = new CustomProvider("MySql.Data", "MySql.Data.MySqlClient.MySqlConnection", "MySql.Data.MySqlClient.MySqlDataAdapter");
mysqlProvider.StartDelimiter = "";//default is "/""
mysqlProvider.EndDelimiter = "";//default is "/""
mysqlProvider.ParameterPrefix = "?";//设置参数前缀
mysqlProvider.SelectPageQuery = "SELECT * LIMIT {0} OFFSET {1}";//设置分页算法
mysqlProvider.IdentityQuery = "SELECT LAST_INSERT_ID()";//设置获取刚刚插入记录Id的函数

3:OLE连接:
现在还没有来自官方的支持。

在vs2005中,直接引用for .net2.0版本的dll即可。至于那个商业版,就得费些功夫了,需要一个许可文件(拖动一个Conection组件到Form上就能自动创建该许可)

附,连接字符串可以到这里查询http://www.connectionstrings.com/, 够全的了。

分享到:
评论

相关推荐

    EFcore连接本地Mysql数据库使用ASP.NET.CORE.API

    2.最新版本的ASP.NET.CORE.Web API 3.实现dbfrist和code 。 4.博客链接:https://blog.csdn.net/EAyayaya/article/details/124048491 5. 不是MVC方式 6.Entity Framework Core Entity Framework Core.Tools Entity ...

    ASP.Net Core MVC 使用EF操作MySQL数据库完整实例

    ASP.Net Core MVC 使用EF操作MySQL数据库完整实例。包含增删改查等完整功能,下载后创建一个MySQL数据库即可以使用

    VUE3.0+Antdv+Asp.net webapi学生信息管理系统

    VUE3.0+Antdv+Asp.net webapi开发的学生信息管理系统,主要包括学生管理,班级管理,成绩管理,课程管理,以及个人信息,用户管理,角色管理,菜单管理等组成部分,SQL Server 2012数据库,具体详细内容可参考本人的...

    asp.net开发常用整理集合

     Asp.Net中WebServices的使用  Asp.net手动绑定数据(分页、编辑、删除、加控件等操作)  Asp.net中My97DatePicker4.2日期的使用  Asp.net中DataList控件添加删除  Asp.net获取请求的用户信息IP地址  获取...

    ASP.NET 3.5开发大全 (中文 PDF 完整书签 非扫描)

    第18、19章:介绍了WCF和WPF应用程序的开发,WCF和WPF是.NET 3.5应用程序框架的新特性,使用WCF能够将桌面应用和Web应用进行整合,而WPF提供了高效的绚丽的桌面应用开发解决方案。 第20章:介绍了LINQ的基本知识以及...

    ASP.NET与MySql的API连接

    ASP.NET与MySql的API连接.

    ASP.NET开发大全

    第18、19章:介绍了WCF和WPF应用程序的开发,WCF和WPF是.NET 3.5应用程序框架的新特性,使用WCF能够将桌面应用和Web应用进行整合,而WPF提供了高效的绚丽的桌面应用开发解决方案。 第20章:介绍了LINQ的基本知识以及...

    ASP.NET Core5.0 WebApi和BlazorWebAssembly 博客后台管理系统(jwt登录校验)MySQL

    ASP.NET Core5.0 WebApi和BlazorWebAssembly 博客后台管理系统(jwt登录校验)MySQL数据库

    ASP.NET 3.5 开发大全

    第17章:介绍了ASP.NET MVC框架的基本知识,ASP.NET MVC框架是下一代ASP.NET应用程序框架,了解ASP.NET MVC基本知识能够为下一代ASP.NET应用程序开发做好准备。 第18、19章:介绍了WCF和WPF应用程序的开发,WCF和WPF...

    使用ASP.NET Core 6.0构建WebApi框架源码

    使用ASP.NET Core 6.0构建WebApi框架...ASP.NET Web API具有与ASP.NET MVC类似的编程方式,ASP.NET Web API不仅仅具有一个完全独立的消息处理管道,而且这个管道比为ASP.NET MVC设计的管道更为复杂,功能也更为强大。

    ASP.NET 3.5 开发大全 压缩包2

    第17章:介绍了ASP.NET MVC框架的基本知识,ASP.NET MVC框架是下一代ASP.NET应用程序框架,了解ASP.NET MVC基本知识能够为下一代ASP.NET应用程序开发做好准备。 第18、19章:介绍了WCF和WPF应用程序的开发,WCF和WPF...

    ASP.NET 3.5 开发大全 压缩包1

    第17章:介绍了ASP.NET MVC框架的基本知识,ASP.NET MVC框架是下一代ASP.NET应用程序框架,了解ASP.NET MVC基本知识能够为下一代ASP.NET应用程序开发做好准备。 第18、19章:介绍了WCF和WPF应用程序的开发,WCF和WPF...

    ASP.NET Web API 对list增删改查的实例 REST

    VS12下REST风格的ASP.NET Web API框架实例。对list实现简单的增删改查。CRUD

    基于ASP.NET+MySQL的Web课程设计

    基于ASP.NET+MySQL的模拟航空机票购买流程的简易网站,项目包含项目源码、数据库、简易的需求分析和详细的功能分析

    asp.net 网上选课系统

    asp.net 结合 mysql数据库写的网上选课系统

    ASP.NET 3.5 开发大全 (上)

    第18、19章:介绍了WCF和WPF应用程序的开发,WCF和WPF是.NET 3.5应用程序框架的新特性,使用WCF能够将桌面应用和Web应用进行整合,而WPF提供了高效的绚丽的桌面应用开发解决方案。 第20章:介绍了LINQ的基本知识以及...

    21天学通ASP.NET源代码

    第三篇主要分析了ASP.NET高级应用的内容,包括角色及成员资格管理、Web用户控件、Web服务应用、ASP.NET AJAX和站点的调试和发布等。第四篇ASP.NET实例开发篇重点讲解了三个ASP.NET实例,包括在线音乐网站、博客站点...

    用ASP.NET三层架构开发留言板

    采用MVC三层架构和VS2015自带EF框架,用ASP.NET技术进行开发Web留言板。内部使用mysql数据库技术,语言为C#。

    mysql-dotnet-core:使用MySQL和Entity Framework的ASP.NET Core 3.1 Web应用程序

    将ASP.NET Core Web应用程序项目转换为将MySQL与Entity Framework一起使用。 这样就可以在macOS或linux目标上使用开发ASP.NET Core项目。 该项目使用.NET Core 3.1目标框架,Visual Studio 2019(版本16.6.2)中...

Global site tag (gtag.js) - Google Analytics