Xamarin.Forms で SQL Server に直接接続してみた

Xamarin.Forms で Webサーバを間に介さずに直接 SQL Server に接続してみました.

実装方法

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 に直接接続してみました.

アセンブリ参照に System.Data を追加しなくてはいけないところでつまづいていましたが、JXUGの皆様にお助けいただきました.ありがとうございました.

Webサーバを介さない簡易な実装ができるので、アプリの範囲によっては Xamarin のメリットになり得るかもしれませんね!

アセンブリ参照がなくても using でエラーが出ないのはなぜなのか…

以上です.