我有一个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但是无法检索值
提前感谢您的帮助
答案 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:
在您的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();
}
在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;
}
}
}