擦。
我想用这个字开头,因为这个东西搞的我十分崩溃,所谓会者不难,难者不会。我刚刚学习flex,打算用flex 连接数据库玩玩,oracle安装太费劲,而sql server 又需要重新安装,好烦,于是果断用mysql 来搞,首先安装mysql之后,用 navigate打开,并新建了一个表,当然是在test数据库中,内容如下:
然后就开始调试,如何用 flex访问到这个破库。
首先是下载了2010最好更新的一个连接mysql 数据库的.swf,距baidu结果看,有好多人都可以连接成功,但我不清楚我为什么不成功,错误莫名其妙,我都无法下手去查,我觉得可能是我现在用的是flash builder4.6的缘故。
于是换思路,打算用之前有些代码的webservice 弄,当然是VS20008上面,用c#搞一个asp的服务应用程序,在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 = "/")]
[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用户论证,我们是用用户名rootmysql下载的vs库放在那个文件里的,密码为空,数据库名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(); /*关闭连接*/

}
}
}
 
 
 
 
 
 
 
 然后在flex的编辑框架内写入以下代码,当然,此处可以不引用那个坑爹的swf了。运行效果见最后:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="ns.adobe/mxml/2009"
xmlns:s="library://ns.adobe/flex/spark"
xmlns:mx="library://ns.adobe/flex/mx"
minWidth="955" minHeight="600"
initialize="init()">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
llections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import mx.rpc.soap.WebService;

private function init():void
{
var webservice:WebService = new WebService();
webservice.wsdl = "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
{
sult && sult.Tables.p_c_china.Rows)
{
var rows:ArrayCollection = sult.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>