擦。
我想用这个字开头,因为这个东西搞的我十分崩溃,所谓会者不难,难者不会。我刚刚学习flex,打算用flex 连接数据库玩玩,oracle安装太费劲,而sql server 又需要重新安装,好烦,于是果断用mysql 来搞,首先安装mysql之后,用 navigate打开,并新建了一个表,当然是在test数据库中,内容如下:
然后就开始调试,如何用 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(); /*关闭连接*/ } }}
然后在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>
转载于:https://www.cnblogs.com/arcserver/archive/2012/11/19/2777791.html