Проблема отображения кириллицы из БД в 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();
}