Xamarin.Forms で SQL Server に直接接続してみた
Xamarin.Forms で Webサーバを間に介さずに直接 SQL Server に接続してみました.
実装環境
- Xamarin Studio 6.0.2
- Xamarin.Android 6.1.2.21
- Xamarin.Forms 2.3.1.114
実装方法
SqlClient を用いて接続を行うのですが、PCLには対応していないので Dependency Service で実装します.
以下実装手順です.
アセンブリ参照の追加
System.Data をアセンブリ参照に追加します.
アセンブリ参照を追加しなくても using でエラーは出ないのですが Class を参照できませんのでアセンブリ参照の追加が必要です.
Dependency Service の実装
using System;
namespace SqlServerSample
{
public interface IDbAccesser
{
void IssueQuery(string connection, string query);
}
}
PCL プロジェクトにインターフェースを実装します.
using System;
using System.Data.SqlClient;
using SqlServerSample.Droid;
using Xamarin.Forms;
[assembly: Dependency(typeof(DbAccesser))]
namespace SqlServerSample.Droid
{
public class DbAccesser: IDbAccesser
{
public void IssueQuery(string connection, string query)
{
using (SqlConnection sqlConnection = new SqlConnection(connection))
{
try
{
sqlConnection.Open();
SqlCommand command = new SqlCommand(query, sqlConnection);
command.CommandTimeout = 600;
command.ExecuteNonQuery();
}
catch (SqlException sqlException)
{
Console.WriteLine(sqlException.Message);
Console.WriteLine(sqlException.StackTrace);
}
finally
{
sqlConnection.Close();
}
}
}
}
}
Android プロジェクトに Dependency Service を実装します.
今回はクエリを発行するメソッドを実装しています.
PCL プロジェクト で Dependency Service を実行
var dbAccesser = DependencyService.Get< IDbAccesser >();
dbAccesser. IssueQuery(ConnectionString, query);
PCL プロジェクト上で Dependency Service を用いて SQL Server にクエリを発行します.
まとめ
Xamarin.Forms で SQL Server に直接接続してみました.
using System.Data.SqlClient ではエラーでないのですが、SqlConnectionを参照できません。原因を知っていらっしゃる方はいますでしょうか?#JXUG #Xamarin pic.twitter.com/vvRsCNxe4g
— サンテア@夏休みはなさそうです (@Santea3173) 2016年8月4日
アセンブリ参照に System.Data を追加しなくてはいけないところでつまづいていましたが、JXUGの皆様にお助けいただきました.ありがとうございました.
@Santea3173 @nuits_jp @amay077 @ytabuchi @AyaseSH へー、見れちゃうんだぁ(@_@)標準のAndroidだと結構ハードル高いですよね?Xamarinならではの強みに…ならないかw
— SHUNSUKE_KAWAI (@_shunsuke_kawai) 2016年8月5日
@_shunsuke_kawai @Santea3173 @nuits_jp @amay077 @ytabuchi んー、出来るからってDB直接弄られるアプリをリリースなんて絶対にするわけないと思うので、あまり魅力的には…苦笑
— 三者三羊@オータガー (@AyaseSH) 2016年8月5日
@Santea3173 @_shunsuke_kawai @amay077 @ytabuchi @AyaseSH 車内からしか使わない業務アプリならありかもしれませんね。営業店の店頭タブレット的なやつ
— Atsushi Nakamura (@nuits_jp) 2016年8月5日
Webサーバを介さない簡易な実装ができるので、アプリの範囲によっては Xamarin のメリットになり得るかもしれませんね!
@Santea3173 @nuits_jp @amay077 @ytabuchi @_shunsuke_kawai アセンブリ参照しなくてもusing出来ることに驚きを隠せない…
— 三者三羊@オータガー (@AyaseSH) 2016年8月4日
アセンブリ参照がなくても using でエラーが出ないのはなぜなのか…
以上です.
ディスカッション
コメント一覧
まだ、コメントがありません