2012-02-15 26 views
-2

ウェブアプリケーションでは、英語以外のデータを挿入するための2つのテキストボックスとボタンを配置します。 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

を使用すると、データとあなたのテーブル構造を挿入するために使用しているコードを表示します。 –

+0

okマーティンスミス –

+0

あなたのデータが 'Varchar'として扱われ、デフォルト照合のコードページで表現できない文字が失われるように、文字列リテラルに' N'プリフィックスがありません。とにかく、その文字列の連結を行うべきではありません。正しいデータ型( 'nvarchar')のパラメータ化されたクエリを使用してください –

答えて

2

あなたはそれが潜在的なデータ損失を非Unicodeとして扱われている文字列リテラルを避けるために

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

のように見える必要があるだろう

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

のようなルックスを生成しているINSERT声明。しかしこれをしないでください

と同様にデータ損失の問題クエリは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テキストに正しく表示されていません。接頭辞として '@ '記号が必要です。 –