问题描述
我正在尝试创建一个应用程序,其中列表中的数据必须一次插入到数据库表中。我做了一些研究,发现这可以使用用户定义的表类型,其中在 c# 中使用数据表并将其传递给执行的存储过程。现在我的问题是 Xamarin.Android 中没有数据表。所以我想用一个列表来代替。我的想法是在应用程序中创建一个列表并将其传递给 webservice 方法,在我的 webservice 方法中,我接收列表并将其转换为数据表,然后将其作为参数传递给存储过程。我写了以下代码:
在我的网络服务中:
[WebMethod]
public bool insrt_dt(List<Class1> lst)
{
sqlParameter param;
sqlConnection conn = new sqlConnection(new DBConnection().ConnectionString);
DataTable dt = list_to_dt(lst);
sqlCommand cmd = new sqlCommand("Insert_Customers",conn);
cmd.CommandType = CommandType.StoredProcedure;
if (conn.State == System.Data.ConnectionState.Closed)
{
conn.open();
}
param = new sqlParameter("@tblcustomers",dt);
param.Direction = ParameterDirection.Input;
param.DbType = DbType.String;
cmd.Parameters.Add(param);
cmd.CommandTimeout = 300;
int a=cmd.ExecuteNonQuery();
if (a > 0)
{
return true;
}
else return false;
}
}
Class1:
public class Class1
{
public int id { get; set; }
public string name { get; set; }
public string country { get; set; }
}
在我的 Xamarin.Android 应用中
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
Button btn = FindViewById<Button>(Resource.Id.button1);
btn.Click += delegate
{
wr.WebService1 ws = new wr.WebService1();
wr.Class1 class1 = new wr.Class1();
List<wr.Class1> lst = new List<wr.Class1>(){
new wr.Class1() { id = 1,name = "hgf",country = "khg" },new wr.Class1() { id = 2,country = "khg"} };
ws.insrt_dt(lst);
ws.insrt_dtCompleted += Ws_insrt_dtCompleted;
};
}
private void Ws_insrt_dtCompleted(object sender,wr.insrt_dtCompletedEventArgs e)
{
bool l = e.Result;
if (l == true)
Toast.MakeText(this,"khh",ToastLength.Long).Show();
else
Toast.MakeText(this,"ijo'pioo",ToastLength.Long).Show();
}
}
但我不断收到此错误:
参数 1:无法从“System.Collections.Generic.List
new wr.Class1() { id = 1,country = "khg"} };
wr.Class1[] class1s = lst.ToArray();
ws.insrt_dt(class1s);
现在我没有收到错误,但它不起作用,我的意思是为什么它说 webservice 方法输入必须是一个数组,而我已经将它创建为一个列表。对此有什么建议吗?
解决方法
据我所知,Xamarin 不支持 System.Data.SqlClient
。如果要为 Xamarin android 项目使用数据库,可以使用 SQLite.NET
。
从 NuGet 安装包。
NuGet:sqlite-net-pcl
https://www.nuget.org/packages/sqlite-net-pcl/
有关如何在 Xamarin 中使用数据库的代码示例,您可以查看下面的链接。 https://docs.microsoft.com/en-us/xamarin/get-started/quickstarts/database?pivots=windows
对于 Xamarin.Android,您可以查看以下链接中的示例代码。 https://docs.microsoft.com/en-us/xamarin/android/data-cloud/data-access/using-sqlite-orm