el_tot93 Ответов: 1

Хранимая процедура для арабских букв


я использую этот код для обновления моих данных о том, что я получаю ?????? в базе данных когда я пишу арабский помет что я должен для этого сделать

create procedure [dbo].[Updateproject]
@ProjectID int,
@Title nchar(10) ,
@Description text ,
@DueBy datetime ,
@Status nvarchar(50)
as
update dbo.uni_project set Status=@Status,Title=@Title,Description=@Description,DueBy=@DueBy where projectID = @ProjectID
return 0
GO


я использую этот код в своей форме

string str = ConfigurationManager.ConnectionStrings["my"].ConnectionString;
                using (SqlConnection sqlcon = new SqlConnection(str))
                {
                    using (SqlCommand cmd = new SqlCommand("Createproject", sqlcon))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("Title", txtTitle.Text);
                        cmd.Parameters.AddWithValue("Description", txtData.Text);
                        cmd.Parameters.AddWithValue("DueBy", cbDate.Text);
                        cmd.Parameters.AddWithValue("username", txtusername.Text);
                        
                        sqlcon.Open();
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("reminder set for" + cbDate.Text);
                    }
                }


Что я уже пробовал:

update dbo.uni_project set Status=@Status,Title=N+@Title,Description=N+@Description,DueBy=@DueBy where projectID = @ProjectID

но я не работал.

Richard MacCutchan

Более вероятно, что вы используете неверную кодовую страницу и шрифт при отображении данных.

Richard Deeming

NB: То text, ntext, и image типы были устаревшими уже более десяти лет. Они будут удалены из будущей версии SQL server. Вы должны использовать varchar(max), nvarchar(max), и varbinary(max) вместо.

ntext, text и image (Transact-SQL) - SQL Server | Microsoft Docs[^]

1 Ответов

Рейтинг:
9

Jörgen Andersson

Как уже упоминал Ричард, вы, вероятно, используете неправильную кодовую страницу, если проблема находится в поле описания.
Лучшее решение для этого - использовать ntext вместо текста.

Если проблема находится в полях заголовка или статуса, то решение состоит в том, чтобы никогда не использовать AddWithValue. Используйте cmd.Parameters.Add() и правильно укажите тип.
Читать это: Можем ли мы уже прекратить использовать AddWithValue ()?[^]


Richard Deeming

Кроме ntext он устарел уже более десяти лет назад! :)

ntext, text и image (Transact-SQL) - SQL Server | Microsoft Docs[^]

Jörgen Andersson

Вы совершенно правы.