silverlight 3でデータベースを使用する。WCF利用
色々調べてやっとここまでたどり着きました。。。
まだまだ、これでは不十分かもしれませんが覚書としてまとめます。
VisualStudio2008にてSilverlightのアプリケーションを作成し、WCFサービスを追加する。
①VisualStudio2008にてSilverlightのアプリケーションを作成。
その際、webプロジェクトもデフォルトで作成されます。
sampleプロジェクトを作成した場合に左図のように
sample.webも追加されている。
②WCFサービスを追加する。
Sample.Webプロジェクト上で右クリック、追加/項目の追加でSilverlight対応のWCFサービスを追加する。
③追加されたWCFService.svc.csに操作を追加する。
namespace sample.Web { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class WCFService { /* OperationContract */ [OperationContract] private IEnumerable<dtData> DataTest() { DataTable dt; dt = getDataTable("select * from kojindata"); List<dtData> lSource = new List<dtData>(); for (int i = 0; i < dt.Rows.Count; i++) { lSource.Add(new dtData { dataID = dt.Rows[i]["ID"].ToString(), dataName = dt.Rows[i]["name"].ToString(), }); } return lSource; } private DataTable getDataTable(string query) { //ここでデータベースに接続しデータテーブルとして返す。 return dt; } } /* DataContract */ [DataContract] public class dtData { /* DataMember */ [DataMember(Name = "ID", Order = 0)] private int _dataID; [DataMember(Name = "名前", Order = 1)] private string _dataName; public string dataID { get { return this._dataID.ToString(); } set { this._dataID = int.Parse(value); } } public string dataName { get { return this._dataName; } set { this._dataName = value; } } } }
[OperationContract]と宣言したメソッドはクライアント側から呼ぶことが可能になる。
今回はクライアント側からDataTestメソッドを呼び出し、データベースに接続してデータを取得する。
[DataContract]クラスを作成し[DataMember]を宣言する。
これにより各データを扱えるようになる。
④MainPage.xamlにDataGridコントロールを加える。
今回はx:Name=”datagrid”としました。
⑤クライアント側プロジェクトからサービスの参照を追加する。
sampleプロジェクトの参照設定を右クリック/サービス参照の追加でサービスを検索してWCFServiceを選択。
操作にDataTestが確認できると思います。
ここでは名前空間をSample.WCFとしました。
⑥MainPage.xaml.cs、クライアント側からWCFサービスを呼び出してデータをセットする。
using sample.Sample.WCF; namespace sample { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void LayoutRoot_Loaded(object sender, System.Windows.RoutedEventArgs e) { WCFServiceClient serviceClient=new WCFServiceClient(); serviceClient.DataTestCompleted += new EventHandler<DataTestCompletedEventArgs> (serviceClient_DataTestCompleted); serviceClient.DataTestAsync(); } private void serviceClient_DataTestCompleted(object sender, DataTestCompletedEventArgs e) { datagrid.ItemsSource = e.Result; } } }
名前空間にsample.Sample.WCFを追加する。
あとはうまく説明できませんが。。。
これで一応データが表示されるようになりました。
//ここでデータベースに接続しデータテーブルとして返す。
の部分には、詳しくは何を書けばいいのですか?
こんにちは。
どのデータベースに接続するかでコードは変わってきます。
ここのところ、プログラミングから遠のいているため、
適切なアドバイスができません。
申し訳ありません。
取り急ぎこちらが参考になればと思います。
http://oshiete.goo.ne.jp/qa/5426165.html
参考にさせていただきました。
DataGridのプロパティ設定にハマったものの、無事データが表示できました。
頼りない情報ですが、お役に立てて光栄です☆