Le stockage des caractères japonais d'un formulaire TextBox dans une table SQL apparaît sous forme de points d'interrogation. J'essaie juste de créer un tableau contenant le texte japonais et la traduction anglaise pour me faciliter la vie alors que j'étudie le japonais. Recherche d'une solution 2 jours maintenant rien ne semble fonctionner.

Je ne suis même pas sûr que ce soit réellement une bonne pratique pour stocker du texte dans une table de données.

La colonne dans laquelle je veux stocker le caractère japonais est également définie sur 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();

}


0
Nick k. 24 avril 2020 à 13:36

2 réponses

Meilleure réponse

Il semble que vous ayez manqué le mot clé into dans votre instruction Insert, comme deuxième remarque, vous devez être conscient que ce type de concaténation de chaînes est évité et qu'il est ouvert aux attaques par injection SQL. Vous devez toujours utiliser des requêtes paramétrées pour évitez injection SQL:

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
Salah Akbari 24 avril 2020 à 11:11

Votre requête présente des problèmes de syntaxe et, deuxièmement, vous devez utiliser des requêtes paramétrées pour vous protéger de l'injection SQL.

Ce qui suit devrait être bon:

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;
2
Ehsan Sajjad 24 avril 2020 à 10:44