将整个数据列表插入到 xamarin.android 中的 sql 数据库表中

问题描述

我正在尝试创建一个应用程序,其中列表中的数据必须一次插入到数据库表中。我做了一些研究,发现这可以使用用户定义的表类型,其中在 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”转换为“app_dt.wr.Class1[] 所以我改用这些行

                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