带有ASP .NET编码问题的SQL Server 2005

时间:2010-09-15 20:43:27

标签: .net asp.net sql-server encoding utf-16

我正在再次写关于我的编码问题...现在有一些代码示例。

简而言之:当保存到数据库输入数据时,某些语言特定字符(例如polish'ń'将无法保存 - 输入'n'被保存。另一方面,字符串:Adamsæbler,æ正在保存。

这是代码,它可以保存内容并显示数据:

    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = "";
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["encoding"].ConnectionString))
        {
            conn.Open();
            var command = conn.CreateCommand();
            command.CommandText = "SELECT * FROM users";
            var reader = command.ExecuteReader();
            while (reader.Read())
            {
                Label1.Text += reader.GetString(0);
            }                
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["encoding"].ConnectionString))
        {
            conn.Open();
            var command = conn.CreateCommand();
            command.CommandText = "INSERT INTO users VALUES('" + Surname.Text + "')";
            command.ExecuteNonQuery();
        }  
    }

Default.aspx有元标记:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

表格如下:

CREATE TABLE [dbo].[Users]([Surname] [nvarchar](50) COLLATE Latin1_General_CI_AI NULL ) ON [PRIMARY]

我不知道还有什么需要解决这个问题。帮助赞赏。

谢谢,Paweł

2 个答案:

答案 0 :(得分:1)

您的表定义似乎是问题所在。姓氏用COLLATE Latin1_General_CI_AI定义。 AI部分表示Accent Insensitive。您需要将排序规则更改为Latin1_General_CI_AS,以保留数据。

答案 1 :(得分:0)

最后我发现了什么是错的。我在字符串之前错过了N前缀(它将字符串标记为UNICODE):

command.CommandText = "INSERT INTO users VALUES(N'" + Surname.Text + "')";

谢谢, 帕维尔