c# - 組み込みMySQLサーバーC#ラッパー?

原文 c# .net mysql wrapper embedded-database

私はアプリケーションにEmbedded MYSQL Server Libraryを追加することを深く考えていました。私のソフトウェアは、ゲームサーバーと追加機能を提供するWeb管理パネルの間のレイヤーです。多くのお客様がサーバー用にMySQLデータベースをリクエストしており(これはプラグインが開発されたものであるため)、手動で設定するのではなく、ソフトウェア内で実行できるのは素晴らしいことです。


このライブラリの.NETラッパーはありませんか?
私のアプリケーションで実行されているソフトウェアは、それに接続できる必要がありますが、ソフトウェアは明らかにローカルで実行されています。これは機能しますか?
答え
このライブラリの.NETラッパーについては知りませんが、バージョン5の.NETコネクタでこのライブラリのサポートを導入する話があったことを覚えていますが、現時点ではその情報を見つけることができません。

Webには、コードを拡張できるサンプルコードがいくつかあります。私は最も完全なものを質問しますhttp://forums.mysql.com/read.php?38,67281,67917->

using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Configuration;

class EntryPoint
{
    [DllImport("libmySQL.dll")]
    static extern IntPtr mysql_init(IntPtr mysql);

    [DllImport("libmySQL.dll")]
    static extern IntPtr mysql_fetch_lengths(IntPtr result);

    [DllImport("libmySQL.dll")]
    static extern IntPtr mysql_store_result(IntPtr mysql);

    [DllImport("libmySQL.dll")]
    static extern IntPtr mysql_fetch_row(IntPtr result);

    [DllImport("libmySQL.dll")]
    static extern IntPtr mysql_real_connect(IntPtr mysql, string host, string user, string passwd, string db, uint port, string unix_socket, uint client_flag);

    [DllImport("libmySQL.dll")]
    static extern uint mysql_field_count(IntPtr mysql);

    [DllImport("libmySQL.dll")]
    static extern string mysql_error(IntPtr mysql);

    [DllImport("libmySQL.dll")]
    static extern int mysql_real_query(IntPtr mysql, string query, uint length);

    static Array MarshalArray(Type structureType, IntPtr arrayPtr, int length)
    {
        if (structureType == null)
            throw new ArgumentNullException("structureType");
        if (!structureType.IsValueType)
            throw new ArgumentException("Only struct types are supported.", "structureType");
        if (length < 0)
            throw new ArgumentOutOfRangeException("length", length, "length must be equal to or greater than zero.");
        if (arrayPtr == IntPtr.Zero)
            return null;
        int size = System.Runtime.InteropServices.Marshal.SizeOf(structureType);
        Array array = Array.CreateInstance(structureType, length);
        for (int i = 0; i < length; i++)
        {
            IntPtr offset = new IntPtr((long)arrayPtr + (size * i));
            object value = System.Runtime.InteropServices.Marshal.PtrToStructure(offset, structureType);
            array.SetValue(value, i);
        }
        return array;
    }


    static void mysql_real_query(IntPtr mysql, string query)
    {
        int result = (query != null) ? mysql_real_query(mysql, query, (uint)query.Length) : mysql_real_query(mysql, null, 0);
        if (result == 0)
            return;
        throw new ApplicationException(mysql_error(mysql));
    }

    static int Main(string[] args)
    {
        IntPtr ptr = mysql_init(IntPtr.Zero);
        Debug.Assert(ptr != IntPtr.Zero);

        IntPtr mysql = mysql_real_connect(ptr, ConfigurationSettings.AppSettings["server"], ConfigurationSettings.AppSettings["username"], ConfigurationSettings.AppSettings["password"], ConfigurationSettings.AppSettings["database"], 0, null, 0);
        Debug.Assert(ptr != IntPtr.Zero, mysql_error(ptr));

        string query = "SELECT * FROM proxy_servers";
        Console.WriteLine("Executing query: {0}", query);
        mysql_real_query(mysql, query);

        IntPtr result = mysql_store_result(mysql);
        Debug.Assert(result != IntPtr.Zero, mysql_error(mysql));

        uint fieldCount = mysql_field_count(mysql);
        Console.WriteLine("field count: {0}", fieldCount);

        for (IntPtr ptrRow = mysql_fetch_row(result); ptrRow != IntPtr.Zero; ptrRow = mysql_fetch_row(result))
        {
            IntPtr[] mysqlRow = (IntPtr[])MarshalArray(typeof(IntPtr), ptrRow, (int)fieldCount);
            IntPtr ptrLengths = mysql_fetch_lengths(result);
            uint[] lengths = (uint[])MarshalArray(typeof(uint), ptrLengths, (int)fieldCount);
            for (int i = 0; i < (int)fieldCount; i++)
            {
                string str = Marshal.PtrToStringAnsi(mysqlRow[i], (int)lengths[i]);
                Console.Write("{0}, ", str);
            }
            Console.WriteLine();
        }
        return 0;
    }
}
関連記事

c# - aspx.csファイルからユーザーコントロールのradiobuttonlistにアクセスする方法

c# - C#ProcessStartInfoでのprivoxyの実行

c# - NUnitからFacebook C#SDKを使用する

c# - Saxon XSLTがパラメーターを渡す

c# - エンティティフレームワークの複数テーブルクエリ

c# - データグリッドビューの最後にクリックされた行に移動する方法

c# - .NETでのネットワークファイルのコピー

c# - テキストボックスでのリストの使用

c# - レコードを入力する前にリストボックスをチェックしてください

c# - WCFでラージオブジェクトを受信する