http://hi.baidu.com/%C7%A7%C0%EF%BA%AE%C9%AB/blog/item/f18b7cc46cfe29dc38db4945.html
这不是我的原创,我也是上网学习的~
How to get data from Oracle DB in silverlight via WCF ?
查看原文可以搜索以上文章名。
这个只是给入门和遇到问题的朋友——毕竟真的有很多小细节没有说明!
而且英文的确看着不舒服。中国进步,还要靠大家的付出啊!!!
-----------------------------------------------------------------------------------------------------------
第一步:新建Silverlight应用程序;
第二步:在.web类型项目上右键,添加“新建项”。选择Silverlight——启用了Silverlight的WCF服务;
然后就多了这个东西:
(图MB)
第三步:在解决方案上右键,添加“新项目”。选择Window——类库;
此类库为调用查询的数据表的属性集合,因此要写上数据表中需要用到字段以及GET、SET方法。
注意此处要在CS文件中添加using System.Runtime.Serialization引用,在类库的引用中添加System.Runtime.Serialization.dll!
这个类库个人理解为一个数据结构,用来存储返回数据表的数据。
第四步:改写第二步中生成的.svc文件下的.svc.cs文件——在.Web类型项目下的(图MB所示)
将:
public voID DoWork() { // 在此处添加 *** 作实现 return; } 改写为: public List<Class1> GetDatabyname(Int32 pInParam) { String oraclesql; List<Class1> returnList = new List<Class1>(); //用List来获取DATASET //创建ORACLE连接 String oracleConnString = "Data Source=testDB;User ID=TEST;Password=test;"; OracleConnection cnn = new OracleConnection(oracleConnString); cnn.open(); oraclesql = "SELECT * FROM TBL_TEST WHERE MYID=" + pInParam; OracleCommand cmd = new OracleCommand(oraclesql,cnn); OracleDataAdapter da = new OracleDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds,"TBL_TEST"); foreach (DaTarow dr in ds.tables["TBL_TEST"].Rows) { returnList.Add(new Class1 { MYID = Convert.ToInt32(dr["MYID"]),MYRECORD = dr["MYRECORD"].ToString() }); } //以List形式返回DATASET return returnList; }
注意了,要添加引用:
using System.Collections.Generic;//用来说明Listusing Classlibrary1;using System.Data.OracleClIEnt;using System.Data;//用来说明DATASET
在.web下的引用添加System.Data.OracleClIEnt.dll——用来解释ORACLE语句;还有你的类库也要添加!在引用中的项目里添加——用来解释List<>中的数据类型!
----------------------------------最终代码---------------------------------------
using System;using System.linq;using System.Runtime.Serialization;using System.ServiceModel;using System.ServiceModel.Activation; using System.Collections.Generic;using Classlibrary1;using System.Data.OracleClIEnt;using System.Data; namespace SilverlightApplication7.Web{ [ServiceContract(namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class Service1 { [OperationContract] public List<Class1> GetDatabyname(Int32 pInParam) { String oraclesql; List<Class1> returnList = new List<Class1>(); //Get your Customer Data from Oracle DB,if you use DataSet,get the DataSet,//Create Customer Object for each row in your Datatable String oracleConnString = "Data Source=testDB;User ID=TEST;Password=test;"; OracleConnection cnn = new OracleConnection(oracleConnString); cnn.open(); //pass your sql filter paramenter here oraclesql = "SELECT * FROM TBL_TEST WHERE MYID=" + pInParam; //oraclesql = "SELECT * FROM TBL_TEST"; OracleCommand cmd = new OracleCommand(oraclesql,MYRECORD = dr["MYRECORD"].ToString() }); } return returnList; } // 在此处添加更多 *** 作并使用 [OperationContract] 标记它们 }}
第五步:快成功了!在C#文件(就是除了.web还有类库以外的那个文件头那里,右键,添加“服务引用”);
按发现;不行对吧?
很好,因为你要先按F5编译一次程序。再来!
行了!(不行的同学留言吧~为你们默哀)
第六步:在MainPage.xaml中做一点点修改,首先加一个button,名为mybutton,再加一个TextBox,名为myText。
在MainPage.xaml.cs添加引用using System.Collections.ObjectModel;using SilverlightApplication7.ServiceReference1;
最后MainPage.xaml.cs完整代码为:
using System;using System.Collections.Generic;using System.linq;using System.Net;using System.windows;using System.windows.Controls;using System.windows.documents;using System.windows.input;using System.windows.Media;using System.windows.Media.Animation;using System.windows.Shapes; using System.Collections.ObjectModel;using SilverlightApplication7.ServiceReference1;namespace SilverlightApplication7{ public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private voID mybutton_Click(object sender,RoutedEventArgs e) { SilverlightApplication7.ServiceReference1.Service1ClIEnt clIEnt = new SilverlightApplication7.ServiceReference1.Service1ClIEnt(); //Pass your parameter,pass ID 4 will return string "Ray" clIEnt.GetDatabynameAsync(Convert.ToInt32(myText.Text.ToString())); clIEnt.GetDatabynameCompleted += new EventHandler<GetDatabynameCompletedEventArgs>(clIEnt_GetDatabynameCompleted); //Close the connection,when you get the error connection timeout,acctually,the connections limited to 10 for each clIEnt. clIEnt.CloseAsync(); } private voID clIEnt_GetDatabynameCompleted(object sender,GetDatabynameCompletedEventArgs e) { //We need a collection object to receive the return List form WCF //We can only use the class defined in Web Service to create clIEnt instance System.Collections.ObjectModel.ObservableCollection<ServiceReference1.Class1> temp = new ObservableCollection<ServiceReference1.Class1>(); temp = e.Result; for (int i = 0; i < temp.Count; i++) { MessageBox.Show(temp[i].MYID.ToString() + " and " + temp[i].MYRECORD.ToString()); } } }}
最后总观~
-------------------------------------------------------
对了,你还要有一个ORACLE数据库,我这个例子是:数据库名:testDB;用户名:TEST;密码:test;所以对应语句为Data Source=testDB;User ID=TEST;Password=test;
然后生成一个表——在ORACLE的sql PLUS中或者什么的,自己解决:
CREATE table TBL_TEST(MYID NUMBER(20),MYRECORD VARCHAR2(50 BYTE))Insert into TBL_TEST(MYID,MYRECORD)Values(1,'Hello');Insert into TBL_TEST(MYID,MYRECORD)Values(2,'I');Insert into TBL_TEST(MYID,MYRECORD)Values(3,'am');Insert into TBL_TEST(MYID,MYRECORD)Values(4,'Ray');
表名为TBL_TEST
--------------------------------------------
最后最后再提醒,记得在MainPage.xaml中的Butto语句中添加Click事件——如最后所示!
<button Content="button" Height="23" HorizontalAlignment="left" margin="205,216,0" name="mybutton" VerticalAlignment="top" WIDth="75" Click="mybutton_Click" />
总结以上是内存溢出为你收集整理的Silverlight学习笔记[4] - 在Silverlight中通过WCF连接ORACLE DB数据库(译)全部内容,希望文章能够帮你解决Silverlight学习笔记[4] - 在Silverlight中通过WCF连接ORACLE DB数据库(译)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)