Проблема чтения иностранных символов Winform Textbox из базы данных - PullRequest
0 голосов
/ 24 января 2020

пожалуйста, помогите. в Visual Studio 2017 и SQL localDB - WinForm учится и создает небольшое приложение. Форма (текстовое поле), где «имя, фамилия, адрес, город, телефон и адрес электронной почты» написаны на чешском языке и содержат «ěščřžýáíé» ». Все хранится в базе данных (nvarchar) по порядку. Все в порядке.

В Form2 у меня есть другая форма, в которой Combobox называет «фамилию», и она должна автоматически заполнять телефон и адрес электронной почты из базы данных. Если фамилия без символа «ěščřžýáíé», все будет отображаться правильно. Если он содержит «ěščřžýáíé», будет отображаться только фамилия, но телефон и электронная почта не будут загружены в TextBox.

Пример кода (без ěščřžýáíé) работает отлично:

        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\newtest.mdf;Integrated Security=True");
        string sql = "select * from test111 WHERE firmadat ='" + prijmeniComboBox.Text + "'; ";
        SqlCommand cmd = new SqlCommand(sql, con);
        SqlDataReader myreader;

        try
        {
            con.Open();

            myreader = cmd.ExecuteReader();
            while (myreader.Read())
            {
                string rollno = myreader.GetInt32(0).ToString();
                string name = myreader.GetString(1);
                string telephone = myreader.GetString(3);
                string email = myreader.GetString(4);
                textBox1.Text = rollno;


                telefonTextBox.Text = telephone;
                emailTextBox.Text = email;
            }
        }
        catch (Exception ex)

        {
            MessageBox.Show(ex.Message);
        }

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 27 января 2020

проверьте ваш код ...

национальность чар

string sql = "select * from test111 WHERE firmadat ='N" + prijmeniComboBox.Text + "'";

0 голосов
/ 25 января 2020

Проблема, вероятно, здесь:

string sql = "select * from test111 WHERE firmadat ='" + prijmeniComboBox.Text + "'; ";

Здесь вы берете строку Unicode и объединяете ее в строку SQL, которая не является строкой Unicode. Я бы сказал вам, как заставить его работать так, как вы хотели, но это действительно очень опасный способ написания SQL . Кто-то из производителей детских игрушек VTech написал SQL * таким образом и позволил хакеру загрузить миллионы изображений детей, снятых устройствами vtech. Если бы один из моих разработчиков написал SQL, как это, они были бы подвергнуты дисциплинарному взысканию, возможно, были уволены.

Я настоятельно рекомендую использовать параметризованные SQL; любое количество целых rnet ресурсов покажет вам, как, например, http://bobby-tables.com - это также решит проблему отсутствия результатов при поиске с использованием поискового термина, содержащего не-ASCII-символы

Взгляните на http://dapper-tutorial.net; использование dapper не только позаботится о параметризации для вас, но и облегчит жизнь вашей базе данных, сократив код до пары строк, например:

using(SqlCommand x = new SqlCommand(conn)
{
  var p = x.Query(
    "select * from test111 WHERE firmadat = @a",
    new { a = prijmeniComboBox.Text }
  );

  firstNameTextBox.Text = p.FirstName; //or what the column is called on db
  ...
}

Вы просто пишете sql, используйте заполнители @namedParameter и предоставьте анонимный объект со свойствами, названными в честь заполнителей. Даппер делает все остальное. Если у вас есть класс Person в вашем проекте, вы даже можете заставить его создавать и заполнять его

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