xamarin表单...无法从SqlCommand获取参数值... error" MarshalByRefObject"声称它是在&mscorlib'中定义的。 ..找不到

时间:2017-03-10 20:21:14

标签: parameters xamarin.android xamarin.forms sqlcommand marshalbyrefobject

我有一个xamarin.forms项目。在PCL中,我有一个包含这三行代码的类....

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',但无法找到

这三行代码在Android特定项目中起作用,但在PCL类中不起作用

我可以将参数添加到PCL类中的SqlCommand但是无法检索值

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

  

完整的命名空间= System.Data.SqlClient.SqlCommand ....我在... C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ MonoAndroid \ v1中引用了System.Data.dll。 0

您引用的DLL仅适用于Mono.Android项目,不适用于PCL项目。它不能用于PCL项目。有关解释,请参阅this case

如果您想在PCL中使用Native Android SQLite,请使用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项目中为Service Implementation创建一个类,并将其注册为Dependency Service:

    //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;
            }
        }
    }