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

asp.net|mysql|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/, 够全的了。

时间: 2024-10-07 10:16:32

准备使用MySQL与ASP.NET开发Web应用的相关文章

用ASP.NET开发Web服务的五则技巧

asp.net|web|web服务|技巧 一.禁用HTTP POST/GET协议 除非另外指定,否则,.NET将试图把Web服务绑定到三种协议:HTTP/POST.HTTP/GET和SOAP.之所以说"试图",是因为依赖于服务的参数和返回类型,HTTP/GET协议可能不可用..NET生成的WSDL文件将自动包含绑定这三种协议的指令,客户程序可以自由选择使用哪种协议与服务通信. 只要在Web.config文件中加入下列内容,就可以方便地删除对HTTP/POST和HTTP/GET协议的绑定

asp.net开发web项目-vss集成环境配置

asp.net|web|项目   首先,vss必须要6.0c以上版本才能在.net环境中使用, 在.net2003安装盘中有6.0d版,6张盘的版本中没有. vss的安装 服务器端: 找到安装文件,运行setup程序,一路next,超简单,不用解释了吧. 客户端: 在服务器上找到vss的安装目录,其中有个vss子目录,里面包含有netsetup.exe, 把vss目录共享出来,记住一定要共享vss目录,如果共享上级目录,是无法网络安装的, 然后在客户机上打开服务器上的vss共享目录,运行nets

用asp.net开发web程序的朋友们进来,共同鉴赏!

问题描述 Java.Struts.Asp.net三大版本代码生成器,要的快去下载吧!.[autocode代码生成器]全面支持自动生成java标准代码!全面支持自动生成struts1.2标准代码!全面支持自动生成ASP.NET标准代码!*全面支持当今流行的三大主流开发架构*同时欢迎大家有空关注我们的QQ空间http://915842778.qzone.qq.com/需要的朋友可以到天空软件园(www.skycn.com).华军软件园(www.newhua.com).CSDN社区(www.csdn.

用ASP技术开发WEB调查(投票)系统 (2)

web|投票|投票 二.调查项目的创建和维护   作 者 : 仙人掌工作室       本节我们说明调查项目创建和维护功能的实现.       创建与维护调查项目的起始页面是Startup.html,该页面负责设定PollMaker.asp和ItemMaker.asp等页面使用的帧结构(从上到下共分三个帧).起始页面所引用的Blank.html只用于指定背景颜色,StartMsg.html提供启动时显示在最下面帧的提示信息.       PollMaker.asp和ItemMaker.asp都包

用ASP技术开发WEB调查(投票)系统 (3)

web|投票|投票 三.调查表单的生成与结果分析   作 者 : 仙人掌工作室       PollWriter.asp先检查表单变量,包括调查项目名字PollName以及(可选的)字符串LinkText和LinkURL,LinkText和LinkURL描述了用户提交其投票结果之后显示的URL.接下来脚本创建并执行从指定调查项目的S_表和A_表提取记录集的SQL命令,然后遍历这个记录集格式化单选按钮.复选框以及其它提示文本,最后输出该调查项目的HTML表单.表单中问题的名字为"CHOICE&qu

用 ASP 技术开发WEB调查(投票)系统 (1)

web|投票|投票 纲要       本文介绍一个用 ASP 技术实现的 WEB 调查系统(也称为投票系统)的实现,该系统支持基于浏览器的调查项目创建与维护.调查表单的动态生成以及投票结果分析.    目录      一.系统概貌   二.调查项目的创建和维护   三.调查表单的生成与结果分析(附源程序)         一.系统概貌   作 者 : 仙人掌工作室       本文所介绍的 WEB 调查系统(或称为投票系统)支持基于浏览器的调查项目创建.管理与结果分析.调查项目及其下属各个问题的

ASP.NET开发web应用过程中遇到的javascript跨域请求问题

解决方案 不提倡跨域的post请求. 0.jquery中ajax的跨域方案jsonp .ashx代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace KB.DSN.Web.API.Tokens { /// <summary> /// Summary description for Get /// </summary> public class

asp.net-ASP.NET开发web网站中,如何动态控制表格的行其中有4列是跨行的

问题描述 ASP.NET开发web网站中,如何动态控制表格的行其中有4列是跨行的 ASP.NET开发web网站中,如何动态控制表格的行其中有4列是跨行的,跨的行数和表格的行数一致,还有4列是不跨行也不夸列的. 我的想法是用DataList来做,但是试了多次不行,请高手们帮忙看看 解决方案 用程序动态生成行和列

使用ASP开发web站点

web|站点 使用ASP开发web站点(前言) 一般的大型网站目前已经越来越少的使用ASP来架构,不过在中小型商务站点上,ASP依然占据了较大的市场范围.ASP以其简单,开发周期短,易维护的优点受到中小型站点管理员的青睐.不过,据我所知,完全使用ASP来集成更新维护网站的仅常见于那些真正的商务站点或者比较成熟的技术站点,更多的网站仅仅有一些独立的栏目在使用ASP程序.这样的特点是站点管理过于分散,比如:每进入一个栏目管理都要输入不同的帐号贺密码.不仅浪费管理员的精力,更加重了网站的维护困难程度.