SQL Server中的数据类型为nvarchar? Asp.net?

时间:2012-02-15 11:37:46

标签: asp.net sql-server

在Web应用程序中,我放置两个文本框和按钮,用于插入非英语语言的数据。当我插入SQL Server时,它只显示“???????(1877?)”,但我将数据类型设为nvarchar,即使它没有使用该语言,是否存在插入和显示非英语文本的任何不同方式。

    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();
    }

2 个答案:

答案 0 :(得分: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 :(得分: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;