0

私は次のコードを使用しています

作成時にデータベースを作成するには

 private void chech_database_exist_or_not()
    {

        string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "validation.db3");
        bool exists = File.Exists(dbPath);
        if (!exists)
            SqliteConnection.CreateFile(dbPath);
        var connection = new SqliteConnection("Data Source=" + dbPath);
        connection.Open();
        if (!exists)
        {
            // This is the first time the app has run and/or that we need the DB.
            // Copy a "template" DB from your assets, or programmatically create one.
            var commands = new[]{

      "CREATE TABLE [user_detail] (_id integer NOT NULL PRIMARY KEY AUTOINCREMENT,user_name varchar,pass varchar,designation varchar,email varchar);",

    "insert into user_detail(user_name,pass) values('testuser','testpass') "


            };
            foreach (var command in commands)
            {
                using (var c = connection.CreateCommand())
                {
                    c.CommandText = command;
                    c.ExecuteNonQuery();
                }
            }
        }

        connection.Close();


    }

ボタンをクリックすると、以下の関数を呼び出します

    private  bool validate_user(string username, string password)
    {
        bool i;
        i = true;
        string str;



        DataTable dt = new DataTable();
        string dbPath1 = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "validation.db3");

        SqliteConnection con = new SqliteConnection("Data Source=" + dbPath1);
        str = "select pass from user_detail where user_name='" + username + "' and pass='" + password + "'";
        SqliteCommand cmd = new SqliteCommand(str, con);
       // SqliteDataAdapter da = new SqliteDataAdapter(cmd);

        FillDatatable(cmd, dt);






        if (dt != null)
        {
            if (dt.Rows.Count > 0)
            {
                i = true;

            }
            else
            {
                i = false;
            }

        }
        else
        {
            i = false;
        } 

        return i;

    }

私が使用する次のクラス

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.OS;
using Mono.Data.Sqlite;
using System.Data;
using System.IO;
using Android.InputMethodServices;

なぜ私がこのエラーを受け取っているのか、そしてどのようにそれを克服するのか誰かが助けることができますか?

4

1 に答える 1

0

この質問に対する私の回答から引用:

残念ながら、Android の SQLite ライブラリには sqlite3_column_origin_name() メソッドのサポートが含まれていないため、それに依存する Mono.Data.Sqlite のすべての部分が失敗します。Xamarin には、制限を回避するために実装を変更するためのバグがここで追跡され ていますが、私が知る限り、まだ時間枠はありません。

問題のコードには の実装は含まれていませんが、この問題があることが知られているFillDatatable()を呼び出すと推測しています。DataTable.Fill()現時点での回避策は、基本的には、Android にこの欠落している機能に依存する ADO.NET の一部 ( DataTable.Fill().

于 2012-06-20T11:32:33.370 に答える