2012-02-15 3 views
-2

В веб-приложении я помещаю два текстовых поля и кнопку для вставки данных, которые не являются английским. Когда я вставляю в SQL Server, он показывает только «??????? (1877?)», Как это, но я взял тип данных как nvarchar, хотя он не подходит на этом языке, есть ли другой способ вставить и отобразить текст, который не находится на английском языке.Тип данных nvarchar в SQL Server? Asp.net?

CREATE TABLE [dbo].[Multilingual](
[name] [nvarchar](50) NULL, 
[address] [nvarchar](50) NULL 
    ) ON [PRIMARY] 
    GO 

    string sq = "insert into multilingual (name,address) values ('" + txtname.Text + "','" + txtadd.Text + "')"; 
    cmd = new SqlCommand(sq, con); 
    cmd.CommandType = CommandType.Text; 

    int i = cmd.ExecuteNonQuery(); 
    if (i == 1) 
    { 
     get(); 
    } 
+0

Показать код, который вы используете для вставки данных и структуры таблицы. –

+0

ok sure martin smith –

+0

Вам не хватает префикса 'N' на строковых литералах, поэтому ваши данные обрабатываются как« Varchar », и вы теряете символы, которые не представлены на кодовой странице вашего сравнения по умолчанию. Но вы не должны делать эту конкатенацию строк в любом случае. Используйте параметризованные запросы правильного типа данных ('nvarchar') –

ответ

2

INSERT заявление вы порождающие выглядит как

insert into multilingual 
(name,address) 
values ('Foo','Bar') 

Это нужно будет выглядеть

insert into multilingual 
(name,address) 
values (N'Foo',N'Bar') /*Notice the N prefix*/ 

избежать строковых литералов обращаются как не Unicode с потенциальной потерей данных. Но не делайте этого.

Как и проблема с потерей данных, ваш запрос уязвим для SQL injection, и ваш сайт будет получить взломанный, если он подвергнут воздействию Интернета. Вы должны использовать параметризованные запросы, как описано в комментариях.

1

Попробуйте сделать что-то вроде ниже:

SqlParameter param = new SqlParameter(); 
param.SqlDbType = System.Data.SqlDbType.NVarChar; 
param.Value = txtname.Text; 

SqlParameter param1 = new SqlParameter(); 
param1 .SqlDbType = System.Data.SqlDbType.NVarChar; 
param1 .Value = txtadd.Text; 

string sq = "insert into multilingual (name,address) values (param ,param1)";  
cmd = new SqlCommand(sq, con);  
cmd.CommandType = CommandType.Text; 
+0

В тексте SQL ваши параметры не указаны правильно. Вам нужны знаки '@', префиксные им. –

Смежные вопросы