Отображение данных из базы данных в текстовое поле после события изменения текста c# - PullRequest
0 голосов
/ 05 августа 2020

Как мне создать приложение c# с базой данных, где я храню значения в базе данных, например, скажем, строка (CName) «xr» = (Описание) «Go для сна» и строка (CName) «vs» = (Описание) «в 22:00», и эти значения будут сохранены, и когда я наберу «xr vs» в текстовое поле, строка «Go спать в 22:00» будет отображаться в другом текстовом поле в форме. Пожалуйста, помогите, я новичок в программировании

{
            using (SqlConnection con = new SqlConnection("Data Source=DESKTOP-EU4PTNQ;Initial Catalog=Medrive;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"))
            {
                con.Open();
                if (bunifuTextBox2.Text != "")
                {

                    string DescriptionQueryStr = "Select CName from Ciphers";
                    string[] tbVals = bunifuTextBox2.Text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                    using (SqlCommand cmd = new SqlCommand(DescriptionQueryStr, con))
                    {
                        for (int i = 0; i > tbVals.Length; i++)
                        {
                            DescriptionQueryStr += " where Description=@Description" + i.ToString() + " OR ";
                            cmd.Parameters.Add("@Description" + i.ToString(), SqlDbType.VarChar).Value = tbVals[i];

                        }
                        //Strip off the last OR
                        DescriptionQueryStr = DescriptionQueryStr.Substring(0, DescriptionQueryStr.Length - 2);
                        StringBuilder sb = new StringBuilder();

                        {

                            using (SqlDataReader da = cmd.ExecuteReader())
                            {
                                if (da.Read())
                                {
                                    var hasAnotherRecord = true;
                                    while (hasAnotherRecord)
                                    {
                                        sb.AppendLine(da.GetValue(0).ToString());
                                        hasAnotherRecord = da.Read();
                                        if (hasAnotherRecord)
                                            sb.Append(" ");
                                    }
                                }
                            }
                           
                        }

                        TAbunifuTextBox10.Text = sb.ToString();

                    }
                  
                }
            }
        }

1 Ответ

1 голос
/ 05 августа 2020

Что-то вроде этого должно работать ...

private void bunifuTextBox2_TextChange(object sender, EventArgs e)
{
    using(SqlConnection con = new SqlConnection("Data Source=DESKTOP-EU4PTNQ;Initial Catalog=Medrive;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"))
    {
        con.Open();
        if (bunifuTextBox2.Text != "")
        {
            using(SqlCommand cmd = new SqlCommand(DescriptionQueryStr , con))
            {   
                string DescriptionQueryStr = "Select CName from Ciphers";
                string[] tbVals = bunifuTextBox2.Text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                for(int i = 0; i < tbVals.Length; i++)
                {
                    DescriptionQueryStr += " where Description=@Description"+i.ToString() + " OR ";
                    cmd.Parameters.Add("@Description" + i.ToString(), SqlDbType.String).Value = tbVals[i];
                }
                //Strip off the last OR
                DescriptionQueryStr = DescriptionQueryStr.Substring(0, DescriptionQueryStr.Length - 2);
                StringBuilder sb = new StringBuilder();
                    
                using(SqlDataReader da = cmd.ExecuteReader())
                {
                    if (da.Read())
                    {
                        var hasAnotherRecord = true;
                        while (hasAnotherRecord)
                        {
                            sb.AppendLine(da.GetValue(0).ToString());
                            hasAnotherRecord = da.Read();
                            if (hasAnotherRecord)
                                sb.Append(" ");
                        }
                    }
                }
            }
            TAbunifuTextBox10.Text = sb.ToString();
        }
    }
}

Кроме того, как Александр указал ниже, вы должны избавиться от класса SqlDataReader (и любого класса IDispoable в целом). Это обеспечивается классом упаковки в блоке using, который я добавил. У Антонина также есть несколько хороших моментов, на которые он обращает внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...