将日文字符从 TextBox 存储到 SQL 表

Posted

技术标签:

【中文标题】将日文字符从 TextBox 存储到 SQL 表【英文标题】:Storing Japanese characters from TextBox to SQL table 【发布时间】:2020-08-07 21:50:02 【问题描述】:

将表单TextBox 中的日文字符存储到SQL 表中会显示为问号。 我只是想制作一张包含日文和英文翻译的表格,以便在我学习日语时让我的生活更轻松。 搜索了 2 天的解决方案,现在似乎没有任何效果。

我什至不确定这是否真的是将文本存储到数据表的好习惯。

我希望存储日文字符的列也设置为nvarchar(50)

private void addWordButton_Click(object sender, EventArgs e)


  con.Open();
  System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();

  cmd.CommandType = System.Data.CommandType.Text;
  cmd.CommandText = "INSERT Words (WordJapanese, WordEnglish) VALUES ('" + newJPwordTxt.Text + "', '" + 
  newENwordTxt.Text + "')";
  cmd.Connection = con;

  cmd.ExecuteNonQuery();
  con.Close();




【问题讨论】:

你用什么来显示存储的值?文本可能已正确存储但未显示为 Unicode。 一般情况下,如果您在 SQL Server 中有可能包含非 ASCII 字符的字符串,而不是 "mytext",则需要编写 N"mytext"。但是,就像其他人提到的那样,使用准备好的语句,这样更安全,您不需要考虑 N 前缀。 【参考方案1】:

看来您在Insert 语句中遗漏了into 关键字,作为第二个注意事项,您需要注意避免这种字符串连接并且它容易受到SQL 注入攻击。您应该始终使用parameterized queries 来避免SQL Injection:

cmd.CommandText = "INSERT into Words (WordJapanese, WordEnglish) VALUES (@WordJapanese, @WordEnglish)";

cmd.Parameters.Add("@WordJapanese", SqlDbType.NVarChar, 50).Value = newJPwordTxt.Text;
cmd.Parameters.Add("@WordEnglish", SqlDbType.NVarChar, 50).Value = newENwordTxt.Text;

【讨论】:

【参考方案2】:

您的查询存在语法问题,其次您应该使用参数化查询来防止 SQL 注入。

以下应该是好的:

cmd.CommandText = "INSERT INTO Words(WordJapanese, WordEnglish) VALUES (@Japanse, @English)";

cmd.Parameters.Add("@Japanse", SqlDbType.NVarChar, 50).Value = newJPwordTxt.Text;
cmd.Parameters.Add("@English", SqlDbType.NVarChar, 50).Value = newENwordTxt.Text;

【讨论】:

以上是关于将日文字符从 TextBox 存储到 SQL 表的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从一个表移动到另一个表并更新外键 (T-SQL 2008)

将日文字符插入 SQL Server 数据库

如何使用来自 c# 的 MySQL 存储过程将表作为输入发送到存储过程?我有 T-SQL 工作

CMapStringToOb::Lookup 不适用于日文字符

甲骨文写日文字符

如何从 T-SQL 存储过程返回表