2017-05-08 8 views
-1

私は助けが必要です!私はコースのデータベース管理のためのソフトウェアを書いています。データを挿入してトランザクションを完了することはできません。私はウクライナ出身で、データベース上でウクライナのデータを使用していますが、トランザクションが完了していないエラー "不正な文字列値: '1行目の' User_name '列に' \ xD0 \ xB2 '}} System.Exception {MySql.Data .MySqlClient .MySqlException} "スタックオーバーフローのすべての記事を読みましたが、何も助けられませんでした。( SET NAMES 'utf8'(cp1251、utf8mb4、koi8r、win1251、cp866など)を使用しますが、何も動作しません開発環境上で符号化さ は私がMySql.Data.MySqlClientを使用したり、MYSQL.DLL コードを接続する - ?>不正な文字列値(C#Visual Studio 2015、MySQL Server 5.5(コンソール))

connStr = "server= localhost;user=root;charset=utf8mb4;database=DB_Journal;port=3306;password=masterkey;"conn = new MySqlConnection(connStr); 

と挿入 - >

conn.Open(); 
string sql = "insert into Users(User_id, User_name, User_surname, User_fname, Login, UType_id, Password,Secret,Answer) values (null, '" + 
    textBox1.Text + "', '" + textBox2.Text + "', '" 
         + textBox4.Text + "', '" + textBox3.Text + "', '" 
         + usr + "', '" + pass + "', '" 
         + richTextBox1.Text + "', '" 
         + textBox7.Text + "')"; 
MySqlCommand cmd = new MySqlCommand(sql, conn); 

cmd.ExecuteNonQuery(); 

(すみません、私はない正確に書くことができますが、私は一生懸命勉強)

+2

最初に修正する必要があります。そのようなSQLを作成しないようにしてください。代わりにパラメータ化されたSQLを使用してください。それは問題をうまく解決するかもしれませんが、それ以外の場合は、SQL Injection Attackの脆弱性を詰めてしまいます。 –

+0

まず、文字列を連結するのではなく、パラメータを変更するだけです。 SQLインジェクションの問題以外にも、文字列値やその他の文字に埋め込まれた引用符などの問題を解決し、構文上の問題を引き起こします。 –

+0

この質問を確認する:http://stackoverflow.com/questions/10957238/incorrect-string-value-when-trying-to-insert-utf-8-into-mysql-via-jdbc – RedRight

答えて

0

私はあなたがSET NAMESで達成しようとしているのかわからないが、それはおそらく、あなたはそれがないと思う何をしません。 (さらに、utf8ではうまく動作しないことがドキュメントに明記されています)

CREATE TABLEステートメントが表示されていないとわかりにくいですが、おそらくあなたのUser_name列を次のように宣言しています。実際にはNCHARまたはNVARCHARのタイプである必要がありますが、タイプCHARまたはVARCHARです。

+0

はい、あなたは正しいです、私は使用しましたテキストのvarcharデータは、最も適切なテキストフィールドへのデータの種類を教えてくれますか? テーブルユーザー ( User_nameのVARCHAR(30) User_surname VARCHAR(30) User_fname VARCHAR(30) ログインVARCHAR(30)NOT NULL USER_ID int型AUTO_INCREMENTは、 UType_idがnullでないint型、 パスワードVARCHAR(30)を作成します 秘密VARCHAR(150) Answer VARCHAR(30) プライマリキー(User_id、ログイン) ) –

+0

あなたは 'VARCHAR'を使っていたので、' NVARCHAR'を使うべきです。 (そして、あなたはこのタイプを使うので、 '(30)'の部分は必要ないと思っています) –

+0

varchar(30)このようなレコードでは、コードを編集して型をNvarcharに変更すると、それが識別されませんでした.MySQL Serverはそれをデータの型として認識しますか? –

関連する問題