首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Xamarin安卓C# SQLite参数查询

Xamarin安卓C# SQLite参数查询
EN

Stack Overflow用户
提问于 2018-06-17 05:11:29
回答 1查看 2.5K关注 0票数 1

我正在尝试根据Xamarin Android C#中的一个参数返回数据。我已经让下面的代码在拉回所有数据时工作,但是我需要使用SQLite WHERE查询来返回特定的数据。

我需要使用AutoCompleteTextView字段中的值作为参数。

代码语言:javascript
复制
       protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // Set our view from the "main" layout resource
        //ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
        SetContentView(Resource.Layout.Main);
        db = new DBHelper(this);
        sqliteDB = db.WritableDatabase;

        container = FindViewById<LinearLayout>(Resource.Id.container);

        var btnEmergencyServices = FindViewById<Button>(Resource.Id.btnEmergencyServices);
        btnEmergencyServices.Click += btnEmergencyServices_onClick;
    }

代码语言:javascript
复制
private void EmergencyServicesData()
    {
        ICursor selectData = sqliteDB.RawQuery("select POLICE, FIRE, MEDICAL from EmergencyServices WHERE COUNTRY = @Country", new string[] { });
        if (selectData.Count > 0)
        {
            selectData.MoveToFirst();
            do
            {
                EmergencyServices emergencyServices = new EmergencyServices();
                emergencyServices.POLICE = selectData.GetString(selectData.GetColumnIndex("POLICE"));
                emergencyServices.FIRE = selectData.GetString(selectData.GetColumnIndex("FIRE"));
                emergencyServices.MEDICAL = selectData.GetString(selectData.GetColumnIndex("MEDICAL"));
                EmergencyServices.Add(emergencyServices);
            }
            while (selectData.MoveToNext());
            selectData.Close();
        }
        foreach (var item in EmergencyServices)
        {
            LayoutInflater layoutInflater = (LayoutInflater)BaseContext.GetSystemService(Context.LayoutInflaterService);
            View addView = layoutInflater.Inflate(Resource.Layout.EmergencyServices, null);
            TextView txtPolice = addView.FindViewById<TextView>(Resource.Id.txtPolice);
            TextView txtFire = addView.FindViewById<TextView>(Resource.Id.txtFire);
            TextView txtMedical = addView.FindViewById<TextView>(Resource.Id.txtMedical);
            txtPolice.Text = item.POLICE;
            txtFire.Text = item.FIRE;
            txtMedical.Text = item.MEDICAL;
            container.AddView(addView);
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-17 06:47:29

如何在查询中使用参数?

假设您使用的是一个Sqlite net包变体(我使用的是sqlite-net-pcl),您将创建一个带有参数的字符串数组,其顺序为,它们将在SQL查询中被替换(通过?标记)。

在这个示例中,直接从我的一个应用程序中提取,在方法中传递了两个参数,一个string和一个bool

需要转换01的字符串表示,因为布尔值在SQLite中存储为整数。

另一个修剪了空格,并在字符串的开头和结尾添加了SQL string通配符%

我用这两个变量创建了一个字符串数组,我的SQL语句包含两个?,它们将按照在SQL查询语句中的左、二、右顺序被这些参数替换。

示例

代码语言:javascript
复制
public async Task<IList<Package>> DbGetSearchedPackagesAsync(string constraint, bool isUserApp = true)
{
    var param1 = Convert.ToInt32(isUserApp).ToString();
    var param2 = $"%{constraint.Trim()}%";
    var packages = await conn.QueryAsync<Package>("SELECT * FROM Package WHERE UserApp = ? AND Name LIKE ? ORDER BY Name COLLATE NOCASE ASC;", new string[2] { param1, param2 });
    return packages;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50891765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档