0

WPFとC#を使用して2つのテキストボックスを介してmysqlデータベースに2つの値を挿入しようとしています。データベースに正常に接続していますが、データを挿入しようとするとエラーが発生します:列"user_name"をnullにすることはできません。本当に紛らわしいのは、最初と2番目のテキストボックスにデータを入力していることです。テキストボックスに挿入するデータが渡されていないようです。私の質問は、問題がどこにあり、それを修正する方法を知っていますか?

PS:私のデータベースは非常に単純で、int16が自動インクリメントされ、nameがvarchar100、user_passwordがvarchar100として含まれています。

これが私のコードです:

    private void button1_Click(object sender, EventArgs e)
    {
        MySqlConnection con = new MySqlConnection("host=tara.rdb.superhosting.bg;user=sozopouk;password=27051996;database=sozopouk_test2;");
        MySqlDataAdapter da = new MySqlDataAdapter();
        da.InsertCommand = new MySqlCommand("Insert into niki2 values (@id,@name, @user_password)", con);

        da.InsertCommand.Parameters.Add("@name", MySqlDbType.VarChar).Value = textBox1.Text;

        da.InsertCommand.Parameters.Add("@user_password", MySqlDbType.VarChar).Value=textBox2.Text;

        con.Open();
        da.InsertCommand.ExecuteNonQuery();
        con.Close();
    }

いくつかの変更を行った後、次のエラーメッセージが表示されます。

'フィールドリスト'の不明な列'name'

編集されたコードは次のとおりです。

private void button1_Click(object sender, EventArgs e)
        {
            MySqlConnection con = new MySqlConnection("host=tara.rdb.superhosting.bg;user=sozopouk;password=27051996;database=sozopouk_test2;");
            MySqlDataAdapter da = new MySqlDataAdapter();
            da.InsertCommand = new MySqlCommand("INSERT INTO niki (name, user_password) VALUES (@name, @user_password)", con);

            da.InsertCommand.Parameters.Add("@name", MySqlDbType.VarChar).Value = textBox1.Text;

            da.InsertCommand.Parameters.Add("@user_password", MySqlDbType.VarChar).Value=textBox2.Text;

            con.Open();
            da.InsertCommand.ExecuteNonQuery();
            con.Close();
        }

nameをuser_nameに置き換えてデータを挿入しようとすると、エラーが発生します**列"user_name"をnullにすることはできません**

影響を受ける行は次のとおりです。

da.InsertCommand.ExecuteNonQuery();

あなたはそれを解決する方法を知っていますか?

4

4 に答える 4

3

あなたのコードを見てください:

da.InsertCommand.Parameters.Add("@user_id", MySqlDbType.Int16).Value = "";
da.InsertCommand.Parameters.Add("@user_name", MySqlDbType.VarChar).Value = "";
da.InsertCommand.Parameters.Add("@user_password", MySqlDbType.VarChar).Value = 
   textBox2.Text;

今あなたが言ったことを見てください:

テキストボックスに挿入するデータが渡されていないようです。

コードをもう一度見てください。user_name(そして実際に)に使用されている値を見てくださいuser_id。テキストボックスの値をどのように使用していますか? textBox1コードで言及されていない場合、データがデータベースに到達することをどのように期待していますか?

user_idさらに、コメントでsblomが言及しているように、明示的な列名を使用することをお勧めします. (したがって、空の値を挿入しようとしても意味がありません。)空の文字列を列の値として使用しようとしている理由も明らかではありませんInt16...

編集:編集したコードの場合:

da.InsertCommand = new MySqlCommand(
   "INSERT INTO niki (name, user_password) VALUES (@name, @user_password)", con);

最初のエラーを考えると、列はuser_nameではなくname...

于 2012-05-18T05:55:01.433 に答える
1

正確に使用したいテーブルを確認できますか?

あなたの実際の質問では

 da.InsertCommand = new MySqlCommand("Insert into **niki2** values (@id,@name, @user_password)", con);

更新された質問では、テーブル名が次のように変更されます

da.InsertCommand = new MySqlCommand("INSERT INTO **niki** (name, user_password) VALUES (@name, @user_password)", con);

2 つのテーブルで遊んでいて混乱していると思います

入っているよう nameniki2、 おそらく実際のテーブルにあります。user_nameniki

これだけの曖昧さで答えられる人はきっといない

試す

テーブルニキ用

        da.InsertCommand = new MySqlCommand("INSERT INTO niki (user_name, user_password) VALUES (@user_name, @user_password)", con);

テーブル niki2 の場合

        da.InsertCommand = new MySqlCommand("INSERT INTO niki2 (name, user_password) VALUES (@name, @user_password)", con);

または反転

幸運

于 2012-05-18T09:49:31.693 に答える
0

値を格納するフィールドをステートメントで指定していないinsertため、名前に関係なく、指定した順序で最初の 3 つのフィールドに値が格納されます。ユーザー名フィールドは 4 番目なので、値が取得されず、null になっていると思います。

使用するフィールドを指定します。

da.InsertCommand = new MySqlCommand("INSERT INTO niki (user_id, user_name, user_password) VALUES (@user_id,@user_name, @user_password)", con);
于 2012-05-18T06:26:42.117 に答える
0

finally I find the problem causing me this exception. As you can see my old code:

da.InsertCommand = new MySqlCommand("INSERT INTO niki (name, user_password) VALUES (@name, @user_password)", con);

da.InsertCommand.Parameters.Add("@name", MySqlDbType.VarChar).Value = textBox1.Text;

da.InsertCommand.Parameters.Add("@user_password", MySqlDbType.VarChar).Value=textBox2.Text;

enter code here

What I did was to replace the

@ with ?

And basically my code looked like :

da.InsertCommand = new MySqlCommand("INSERT INTO niki (name, user_password) VALUES (?name, ?user_password)", con);

da.InsertCommand.Parameters.Add("?name", MySqlDbType.VarChar).Value = textBox1.Text;

da.InsertCommand.Parameters.Add("?user_password", MySqlDbType.VarChar).Value=textBox2.Text;

enter code here

Thanks to all who involved in the discussion!

于 2012-05-20T06:41:18.303 に答える