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, но не могу получить значение

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

1 ответ

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

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

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

  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;
            }
        }
    }
    
Другие вопросы по тегам