擦。

我想用这个字开头,因为这个东西搞的我十分崩溃,所谓会者不难,难者不会。我刚刚学习flex,打算用flex 连接数据库玩玩,oracle安装太费劲,而sql server 又需要重新安装,好烦,于是果断用mysql 来搞,首先安装mysql之后,用 navigate打开,并新建了一个表,当然是在test数据库中,内容如下:

WPS 与 MySQL 的连接_c#

然后就开始调试,如何用 flex访问到这个破库。

首先是下载了2010最好更新的一个连接mysql 数据库的.swf,距baidu结果看,有好多人都可以连接成功,但我不清楚我为什么不成功,错误莫名其妙,我都无法下手去查,我觉得可能是我现在用的是flash builder4.6的缘故。

于是换思路,打算用之前有些代码的webservice 弄,当然是VS20008上面,用c#搞一个asp.net的服务应用程序,在hello world下面自己又重新添加的。

由于没什么这方面的基础和了解,所以是瞎撞,主要是在网上搜集一些已有的成功路径,这样,我用了很多的时间搜集,但搜集到的信息十分稀少,不是稀少,而是没有,我是真没有搜集到用 wsdl连接mysql数据库并用于flex 的数据加载的,大家都是用java写的较多见,但java不懂啊,还有用php写的,看起来很简洁,但就是没有懂,苦苦寻觅之下,终于找到一个用c#连接mysql数据库的,但是控制台的应用程序,但这时已经是接近下班了,我都要崩溃了,这一天功夫花的,我心疼。

于是我打算把整个过程写下来:

首先,你得下载一个dll,必须的,然后引用到你的程序里,webservice当中。

这个dll,也是十分坑爹,下载下来后有两个包,一个64 一个86,我当自己电脑64位,结果就走到死胡同里了,选择86的试试,可是里面的那个版本叫多啊,我是服了,找了一个没有单独放置的dll,不知其何处dll,也不知道其内容,引用后,没有明显出错。就这样开始了。

其他我就不多说了,把下面代码直接复制进去,运行,输入sql语句:select * from p_c_china,于是,你可以看到结果如下下下面:(看这段代码下面有图)

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using MySql.Data.MySqlClient;namespace WebService1
{
 /// <summary>
 /// Service1 的摘要说明
 /// </summary>
 [WebService(Namespace = "http://tempuri.org/")]
 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 [ToolboxItem(false)]
 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
 // [System.Web.Script.Services.ScriptService]
 public class Service1 : System.Web.Services.WebService
 { [WebMethod]
 public string HelloWorld()
 {
 return "Hello World";
 } [WebMethod]
 public DataTable MySqlQuery(string sql)
 { string source = "server=localhost;UserId=root;password=111;database=test";
 /*指定服务器和数据名,这个和书上有点不同,书上是windows用户论证,我们是用用户名root的,密码为空,数据库名information_scema*/
 MySqlConnection conn = new MySqlConnection(source);//创建连接
 conn.Open(); /*打开连接*/ string select = "select * from p_c_china";
 MySqlCommand cmd = new MySqlCommand(select, conn);
 MySqlDataReader reader = cmd.ExecuteReader(); /*执行查询命令*/ DataTable dt = new DataTable();
 dt.Load(reader);
 return dt;
 conn.Close(); /*关闭连接*/

 }
 }
}

 

 

 

WPS 与 MySQL 的连接_数据库_02

 

WPS 与 MySQL 的连接_System_03

 

 

 然后在flex的编辑框架内写入以下代码,当然,此处可以不引用那个坑爹的swf了。运行效果见最后:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
 xmlns:s="library://ns.adobe.com/flex/spark" 
 xmlns:mx="library://ns.adobe.com/flex/mx"
 minWidth="955" minHeight="600"
 initialize="init()">
 <fx:Declarations>
 <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <fx:Script>
 <![CDATA[
 import mx.collections.ArrayCollection;
 import mx.rpc.events.ResultEvent;
 import mx.rpc.soap.WebService;

 private function init():void
 {
 var webservice:WebService = new WebService();
 webservice.wsdl = "http://localhost:53072/Service1.asmx?wsdl";
 webservice.loadWSDL();
 webservice.addEventListener(ResultEvent.RESULT,callback);
 webservice.MySqlQuery("select * from p_c_china");

 }

 private function callback(event:ResultEvent):void
 {
 if(event.result && event.result.Tables.p_c_china.Rows)
 {
 var rows:ArrayCollection = event.result.Tables.p_c_china.Rows;
 dg.dataProvider = rows;
 }
 }
 ]]>
 </fx:Script>

 <mx:DataGrid id="dg" width="100%">
 <mx:columns>
 <mx:DataGridColumn headerText="id" dataField="id"/>
 <mx:DataGridColumn headerText="province name" dataField="province_name"/>
 <mx:DataGridColumn headerText="county name" dataField="county_name"/>
 </mx:columns>
 </mx:DataGrid>
</s:Application>