Формы xamarin не могут получить значение параметра из ошибки SqlCommand. MarshalByRefObject утверждает, что он определен в «mscorlib»... не удалось найти

У меня есть проект xamarin.forms. В PCL у меня есть класс с этими 3 строчками кода....

1) SqlCommand cmd = new SqlCommand(); .... (Примечание: эта строка кода работает)

2) cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Char, 5)).Direction = ParameterDirection.Input; .... (Примечание: эта строка кода работает)

3) var userid = cmd.Parameters["@UserID"].Value; .... (Примечание: эта строка кода НЕ работает)

Я получаю это сообщение...

«Ссылка по типу «MarshalByRefObject» утверждает, что она определена в «mscorlib», но не может быть найдена

эти 3 строки кода работают в конкретном проекте Android, но не в классе PCL.

Я могу ДОБАВИТЬ параметры в SqlCommand в классе PCL, но НЕ МОГУ получить значение

Заранее спасибо за помощь


person trent    schedule 10.03.2017    source источник
comment
Каково полное пространство имен SqlCommand? Вы ссылались на какую-либо библиотеку в PCL?   -  person Elvis Xia - MSFT    schedule 13.03.2017
comment
Полное пространство имен = System.Data.SqlClient.SqlCommand.... я ссылался на System.Data.dll в... C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0   -  person trent    schedule 13.03.2017


Ответы (1)


Полное пространство имен = System.Data.SqlClient.SqlCommand.... я ссылался на System.Data.dll в... C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0

Упомянутая вами DLL предназначена только для проекта Mono.Android, а не для проекта PCL. Его нельзя использовать в проекте PCL. Для объяснения см. этот случай.

Если вы хотите использовать Native Android SQLite в PCL, используйте Служба зависимостей:

  1. В вашем проекте PCL. Создайте интерфейс (ISQLDb) для службы зависимостей и используйте службу с DependencyService.Get<ISQLDb>():

    public interface ISQLDb
    {
        void InitCmd();
    }
    
    private void btnClick_Clicked(object sender, EventArgs e)
    {
        //use the service any where in your PCL project
        ISQLDb db=DependencyService.Get<ISQLDb>();
        db.InitCmd();
    }
    
  2. Создайте класс для реализации службы в проекте Mono.Android и зарегистрируйте его как службу зависимостей:

    //register the Dependency Service
    [assembly:Xamarin.Forms.Dependency(typeof(SQLDbImpl))]
    namespace SQLCommandDemo.Droid
    {
        //implements the ISQLDb Interface
        public class SQLDbImpl : ISQLDb
        {
            public void InitCmd()
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Char, 5)).Direction = ParameterDirection.Input;
                var userid = cmd.Parameters["@UserID"].Value;
            }
        }
    }
    
person Elvis Xia - MSFT    schedule 14.03.2017