2012-02-15 130 views
-2

在Web應用程序中,我放置了兩個文本框和用於插入非英語語言數據的按鈕。當我插入到SQL Server中時,它只顯示「???????(1877?)」,但我認爲數據類型爲nvarchar,即使它不是以該語言出現的,是否有任何不同的方式插入並顯示不是英文的文字。SQL Server中的數據類型nvarchar? 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

顯示您正在使用插入的數據和表結構的代碼。 – 2012-02-15 11:40:11

+0

確定馬丁史密斯 – 2012-02-15 11:45:48

+0

您在字符串文字中缺少'N'前綴,因此您的數據被視爲'Varchar',並且會丟失在默認排序規則的代碼頁中無法表示的字符。但不管怎樣,你都不應該這樣做字符串連接。使用正確數據類型的參數化查詢('nvarchar') – 2012-02-15 11:52:31

回答

2

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

那就需要像

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

避免字符串文字的INSERT聲明你生成的外觀被視爲潛在的數據丟失的非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文本中未正確指示。你需要在他們前面加上'@'標誌。 – 2012-02-17 05:35:13

相關問題