Проблема отображения кириллицы из БД в DataGridView

Код чтения:

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\kerri\OneDrive\Документы\Employees.mdf;Integrated Security=True;Connect Timeout=30;");

private void PushInDataGrid()
{
    con.Open();
    string query = "select * from Employees ";
    SqlDataAdapter sda = new SqlDataAdapter(query, con);
    //var builder = new StringBuilder(sda);
    var ds = new DataSet();
    sda.Fill(ds);
    dataGridView1.DataSource = ds.Tables[0];
    con.Close();
}

Код создания таблицы:

CREATE TABLE [dbo].[Employees] (

    [Id]             INT           NOT NULL,
    [FirstName]      NVARCHAR (50) NOT NULL,
    [LastName]       NVARCHAR (50) NOT NULL,
    [JobTitle]       NVARCHAR (50) NOT NULL,
    [Wage]           NVARCHAR (50) NOT NULL,
    [PhoneNumber]    NVARCHAR (50) NULL,
    [Address]        NVARCHAR (20) NOT NULL,
    [DateOfBirthday] NVARCHAR (20) NOT NULL,
    [Gender]         NVARCHAR (12) NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

Код вставки данных:

con.Open();
string query = "insert into Employees values('" + id + "','" + firstName + "','" + lastName + "','" + jobTitle + "','" + wage + "','" + phoneNumber + "','" + address + "','" + dob + "','" +gender+ "')";
SqlCommand cmd = new SqlCommand(query, con);
cmd.ExecuteNonQuery();
MessageBox.Show("Employee Successfully Added");
con.Close();

Ответы (2 шт):

Автор решения: Alexander Petrov

Текстовые колонки в таблице определены как NVARCHAR:

[FirstName]      NVARCHAR (50)

А вставляете вы данные без указания этого факта:

"insert into Employees values(... "','" + firstName + "','" ...

Как минимум, нужно явно указывать, что это тип N:

"insert into Employees values(... ", N'" + firstName + "', N'" ...

Но гораздо правильней использовать параметризованные запросы.

К тому же у вас все данные почему-то представлены в виде строк: и дата рождения DateOfBirthday, и зарплата Wage. Исправьте немедленно!

→ Ссылка
Автор решения: kerri
string sqlExp = "insert into Employees(Id,FirstName,LastName,JobTitle,Wage,PhoneNumber,Address,DateOfBirthday,Gender)"
    + "values(@id,@firstName,@lastName,@jobTitle,@wage,@phoneNumber,@address,@date,@gender)";
using (con)
{
    con.Open();
    SqlCommand command = new(sqlExp, con);
    command.Parameters.Add(new SqlParameter("@id",id));
    command.Parameters.Add(new SqlParameter("@firstName",firstName ));
    command.Parameters.Add(new SqlParameter("@lastName", lastName));
    command.Parameters.Add(new SqlParameter("@jobTitle", jobTitle));
    command.Parameters.Add(new SqlParameter("@wage", wage));
    command.Parameters.Add(new SqlParameter("@phoneNumber",phoneNumber));
    command.Parameters.Add(new SqlParameter("@address", address));
    command.Parameters.Add(new SqlParameter("@date", dob));
    command.Parameters.Add(new SqlParameter("@gender", gender));
    command.ExecuteNonQuery();
    MessageBox.Show("Успешно добавлено");
    con.Close();
}
→ Ссылка