2011-02-23 18 views
0
private void button1_Click(object sender, EventArgs e) 
    { 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd.CommandType = CommandType.Text; 
     string query = @"insert into Contacts (fname,lname,llnum,mobnum,e-mail,street,city,country) values (@fname,@lname,@llnum,@mobnum,@e-mail,@street,@city,@country)"; 
     cmd.CommandText = query;//@"insert into Contacts (fname,lname,llnum,mobnum,e-mail,street,city,country) values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + textBox8.Text + "')"; 
     OleDbParameter myParm = cmd.Parameters.Add("@fname", OleDbType.VarChar, 50); 
     myParm.Value = textBox1.Text; 
     myParm = cmd.Parameters.Add("@lname", OleDbType.VarChar, 50); 
     myParm.Value = textBox2.Text; 
     myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
     myParm.Value = textBox2.Text; 
     myParm = cmd.Parameters.Add("@mobnum", OleDbType.Integer, 12); 
     myParm.Value = textBox2.Text; 
     myParm = cmd.Parameters.Add("@e-mail", OleDbType.VarChar, 50); 
     myParm.Value = textBox2.Text; 
     myParm = cmd.Parameters.Add("@street", OleDbType.VarChar, 50); 
     myParm.Value = textBox6.Text; 
     myParm = cmd.Parameters.Add("@city", OleDbType.VarChar, 50); 
     myParm.Value = textBox7.Text; 
     myParm = cmd.Parameters.Add("@country", OleDbType.VarChar, 50); 
     myParm.Value = textBox8.Text; 

     cmd.Connection = myconn; 
     myconn.Open(); 
     cmd.ExecuteNonQuery(); 
     System.Windows.Forms.MessageBox.Show("User Account Succefully Created", "Caption", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); 
     myconn.Close(); 
    } 

これはフィールドをパラメータ化する方法ですが、「パラメータ値を文字列からInt32に変換できません」というメッセージが表示されます。エラークエリのパラメータ化方法

+0

asp.net/forumからのコードがstackoverflowで表示され始めました。thats sad –

答えて

1

すべての値をパラメータに 'string'として割り当てていますが、これは正しくありません。

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
    myParm.Value = Convert.ToInt32(textBox2.Text); 
+0

はい、私は整数でなければならない2つのパラメータを修正し、プログラムを実行しました。追加ボタンを押します。INSERT INTO文に構文エラーがあります – Beginner

+0

次に、挿入文にエラーがあります。各列の周りに[]を設定してください。おそらくあなたの列の1つが予約語です。 –

+0

"@電子メール"は失敗しているパラメータです。引用符なしで "@Email"に名前を変更します。 –

0

さて、あなたはタイプOleDbType.Integerを指定するパラメータを持っている場合、あなたは次の条件を満たす必要があります。 あなたは、このパラメータに割り当てる値は、整数でなければなりませんので、整数として、例えばllnumパラメータを宣言しましたの整数の値を指定してください。

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
myParm.Value = textBox2.Text; 

あなたはこのような何かを実行する必要があります:あなたはを通してデバッグする必要がある、その後

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
myParm.Value = Convert.ToInt32(textBox2.Text); 

をして、ステップバイステップで、へ

はあなたがここで設定していることは、単に別の文字列でありますを見つけてください。ここであなたのコードにはのエラーが発生しています。

1

あなたはそのエラーが発生しましたか?いろいろなテキスト以外のパラメータがありますが、あなたはまだそれらにテキストのパラメータ値を与えようとしています。

個人的に私は自分自身を解析します。

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
myParm.Value = int.Parse(textBox2.Text, ...); // Whatever options you want to use 

テキストはむしろ、あなたがしたい正確にどのようにそれを行うために、データベース・プロバイダーに頼るよりも、データベース・パラメータに変換する方法を完全に制御持っているその方法 - 確かにそれはでそれをを行うにしようとした場合をすべてですが、そうでない場合があります。

(私も別の変数を宣言するのではなく、異なるパラメータで同じものを再利用することをお勧め。)

0

あなたは整数として定義する2つのパラメータを持っていますが、文字列を割り当てます。

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
    myParm.Value = textBox2.Text; 
    myParm = cmd.Parameters.Add("@mobnum", OleDbType.Integer, 12); 
    myParm.Value = textBox2.Text; 

あなたがすべき最初にtextBox2.Textの値をintに変換してから割り当てます。

1

使用する場合ははるかに簡単:

cmd.Parameters.Add("@llnum", OleDbType.Integer, 12).Value =Convert.ToInt32(textbox.text); 

よろしく!

0

Convert.ToInt32 を使用して整数パラメータを整数に変換する必要があります。文字列ではないすべての型に対して変換を行う必要があります。 TextBox.Textプロパティは文字列値であるためです。

関連する問題