Sql 从数据库读取外来字符Winform文本框时出现问题

Sql 从数据库读取外来字符Winform文本框时出现问题,sql,winforms,Sql,Winforms,请帮忙。在Visual Studio 2017和SQLlocalDB-WinForm学习并制作一个小应用程序。表单(文本框),其中“姓名、姓氏、地址、城市、电话和电子邮件”用捷克语书写,包含“ěšřýýáé”。所有内容都按顺序存储在数据库(nvarchar)中。一切正常 在Form2中,我有另一个表单,Combobox调用一个“姓氏”,它必须从数据库中自动填写电话和电子邮件。如果姓氏没有“ěšššššššššššššŠýššš25“,只显示姓氏,但手机和电子邮件不会加载到文本框中 代码示例(不带

请帮忙。在Visual Studio 2017和SQL
localDB
-WinForm学习并制作一个小应用程序。表单(文本框),其中“姓名、姓氏、地址、城市、电话和电子邮件”用捷克语书写,包含“ěšřýýáé”。所有内容都按顺序存储在数据库(
nvarchar
)中。一切正常

在Form2中,我有另一个表单,Combobox调用一个“姓氏”,它必须从数据库中自动填写电话和电子邮件。如果姓氏没有“ěšššššššššššššŠýššš25“,只显示姓氏,但手机和电子邮件不会加载到文本框中

代码示例(不带ěšřýýáíé)可以完美地工作:

        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);
        }

谢谢您的帮助。

问题可能在这里:

string sql = "select * from test111 WHERE firmadat ='" + prijmeniComboBox.Text + "'; ";
在这里,您使用Unicode字符串并将其连接到一个不是Unicode字符串的SQL字符串中。我会告诉您如何让它按照您的预期工作,但是这是一种非常危险的编写SQLs的方法。并使黑客能够下载vtech设备拍摄的数百万儿童图像。如果我的一个开发人员像这样编写SQL,他们将受到纪律处分,可能会被解雇

我强烈建议您使用参数化SQL;任何数量的互联网资源都将向您展示如何使用,例如-它还将解决使用包含非ASCII字符的搜索词进行搜索时无法获得结果的问题

看一看,;使用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类,你甚至可以让dapper为你创建并填充它

请测试你的代码

国籍字符


string sql=“从test111中选择*,其中firmadat=”N“+prijmeniComboBox.Text+”

谢谢所有试图帮助的人。我尝试了下面的代码,效果很好!string sql=“select*from xxxtxxx,其中xxxdat类似于N“%”+firmaComboBox.SelectedItem.ToString()+“%”;是的,谢谢。我使用了一些东西,它可以工作:string sql=“select*from xxxtxxx,其中xxxdat类似于N“%”+firmaComboBox.SelectedItem.ToString()+“%”;