我正在尝试创建一个应用程序,其中列表中的数据必须同时插入数据库表中。我做了一些研究,发现使用用户定义的表类型是可能的,在c#中,使用数据表并将其传递给执行的存储过程。现在我的问题是Xamarin.Android中没有数据表。所以我想用列表代替。我的想法是在应用程序中创建一个列表,并将其传递给webservice方法,在我的webservice方法中,我接收列表并将其转换为数据表,然后将其作为参数传递给存储过程。我写了以下代码:
在我的Web服务中:
[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;
}
}
类别1:
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, name = "hgf", 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<"转换;app_dt.wr.Class1>'到'app_dt.wr.Class1[]所以我用这些线路代替
new wr.Class1() { id = 1, name = "hgf", country = "khg" },
new wr.Class1() { id = 2, name = "hgf", 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://learn.microsoft.com/en-us/xamarin/get-started/quickstarts/database?pivots=windows
对于Xamarin.Android,您可以在下面的链接中查看示例代码。https://learn.microsoft.com/en-us/xamarin/android/data-cloud/data-access/using-sqlite-orm