代码之家  ›  专栏  ›  技术社区  ›  dragonfly

存在ASP.NET编码问题的SQL Server 2005

  •  1
  • dragonfly  · 技术社区  · 14 年前

    我又在写我的编码问题…现在有一些代码示例。

    简而言之:当保存到数据库输入数据时,一些语言特定的字符,如polish“_”将不会保存-insted“n”将被保存。另一方面,弦:亚当斯布勒,用是储蓄。

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

        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标记:

    <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]
    

    我不知道解决这个问题还需要什么。感谢您的帮助。

    谢谢,帕维

    2 回复  |  直到 14 年前
        1
  •  1
  •   bobs    14 年前

    您的表定义似乎有问题。姓氏定义为 COLLATE Latin1_General_CI_AI . 这个 AI 部分表示不区分重音。您需要将排序规则更改为Latin1_General_Ci_AS,以保留数据。

        2
  •  0
  •   dragonfly    14 年前

    最后我发现了问题所在。我在字符串前缺少n个前缀(它将字符串标记为Unicode):

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

    谢谢, Pawe