読者です 読者をやめる 読者になる 読者になる

ぴよぴよエンジニアの日記

ぴよぴよエンジニアの日記です 技術系のことや日常のことをつぶやきます

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

Xamarin C# 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 で実装します.

以下実装手順です.



アセンブリ参照の追加

f:id:Santea:20160807193311p:plain

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 でエラーが出ないのはなぜなのか...


以上です.