转自 http://hi.baidu.com/qianlihanse/item/458aa7c8d93d4e0cac092ff4

这不是我的原创,我也是上网学习的~

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;——用来说明List

using 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, 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()

});

}

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,0" Name="myButton" VerticalAlignment="Top" Width="75" Click="myButton_Click" />

在silverlight中通过WCF连接ORACLE DB数据库(转)的更多相关文章

  1. DELPHI中使用UNIDAC连接ORACLE数据库

    DELPHI中使用UNIDAC连接ORACLE数据库   最近在DELPHI中使用到UNIDAC连接到oracle数据库,这样可以不要安装oracle客户端,比较方便使用:所以简单学习了一下,主要是用 ...

  2. DBCP连接Oracle,数据库重启后现OALL8 is in an inconsistent state异常

    最近,DBCP连接Oracle,数据库重启后现OALL8 is in an inconsistent state异常. 版本说明 commons-dbcp-1.4.jar commons-pool-1 ...

  3. win7下VS.NET中通过LinqToSQL连接oracle数据库

    .NetFramework3.5提供了LinqToSQL组件,为我们访问数据库提供了方便.我用的是VS+Oracle开发工具.也想体验一下快捷方便的感觉. 1.连接Oracle数据库 在连接Oracl ...

  4. VS2010 VS2012 如何连接Oracle 11g数据库

    oracle是开发者常用的数据库,在做.NET开发是,由于Vs自带的驱动只能连接oracle 10g及以下版本,那么如何连接oracle 11g呢? 工具/原料   事先安装VS2010或者VS201 ...

  5. Java连接Oracle/MySQL数据库教程

    一.下载 oracle java驱动下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090 ...

  6. python通过mongoengine中connect函数连接多个数据库

    mongoengine支持程序同时连接多个数据库,这些数据库可以位于一个或多个mongo之中,通过alias名称区分不同的连接即可. 可以通过switch_db切换到不同的数据库,进行读写操作,swi ...

  7. NaviCat Primium远程连接Oracle 11g数据库操作方法

    说明:作者使用的系统是windows 10 64位系统,使用的软件及插件都是基于64位系统进行安装.一. 软件准备 1.windows 10 64位 操作系统 2.NaviCat Primium 11 ...

  8. PL/SQL Developer工具包和InstantClient连接Oracle 11g数据库

    一.前言 PLSQL Developer是Oracle数据库开发工具,很牛也很好用,PLSQL Developer功能很强大,可以做为集成调试器,有SQL窗口,命令窗口,对象浏览器和性能优化等功能. ...

  9. sqldbx配置连接Oracle 12C数据库

    本地开发环境: Windows10 64位.Oracle 12C客户端 32位.sqlDBX (32位) =============================================== ...

随机推荐

  1. 用maven搭建 testNG+PowerMock+Mockito测试框架

    单元测试是开发中必不可少的一部分,是产品代码的重要保证. Junit和testNG是当前最流行的测试框架,Junit是使用最广泛的测试框架,有兴趣的话自己baidu一下. testNG基于Junit和 ...

  2. C++ 之 const 随笔记

    const关键字,相信对C语言有所了解的同学都应该知道他的作用:1.修饰常量,2.修饰指针,3.修饰函数 1.修饰常量 const修饰后的变量被定义为常量 2.修饰指针 当用const修饰指针的时候, ...

  3. Divisors

    计算小于n的数中,约数个数最多的数,若有多个最输出最小的一个数. http://hihocoder.com/problemset/problem/1187 对于100有 60 = 2 * 2 * 3 ...

  4. Mac下同时安装多个版本的JDK & Mac 可设置环境变量的位置、查看和添加PATH环境变量

    http://ningandjiao.iteye.com/blog/2045955 http://elf8848.iteye.com/blog/1582137

  5. c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针

    1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...

  6. 在 Xcode 6 中使用矢量图( iPhone 6 置配 UI)

    在 Xcode 6 中使用矢量图( iPhone 6 置配 UI) (本文转载:http://iosdeveloper.diandian.com/post/2014-09-25/40063062789 ...

  7. IOS7 SDK 几宗罪

    IOS7 app 默认是全屏模式,所以之前的程序窗口会上向移动到状态栏上面,所以在底边会有一条大白边 表格单元格,默认是白色背景,之前程序设置的透明效果,这里不在起作用,需要用下面的委托方法改变.- ...

  8. Java常量字符串String理解

    Java常量字符串String理解 以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用  "eq ...

  9. Linux线程-pthread_kill

    该函数可以用于向指定的线程发送信号: int pthread_kill(pthread_t threadId,int signal); 如果线程内不对信号进行处理,则调用默认的处理程式,如SIGQUI ...

  10. 使用notepad++进行格式转换

    由于历史原因,导致Windows.Unix/Linux.Mac三者之间,对于文本中所用回车换行符,表示的方法,都不一样.这就导致了很多人都会遇到回车换行符的困惑,同时需要在不同格式间进行转换. 1)查 ...