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 :(得分:1)
您将所有值都指定为参数的“字符串”,这是不正确的。
例如,您已将llnum
参数声明为整数,因此您为此参数指定的值应为整数:
myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12);
myParm.Value = Convert.ToInt32(textBox2.Text);
答案 1 :(得分:1)
哪里你得到了那个错误?您有各种非文本参数,但您仍然只是尝试为它们提供文本参数值。
就我个人而言,我会自己进行解析,例如
myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12);
myParm.Value = int.Parse(textBox2.Text, ...); // Whatever options you want to use
通过这种方式,您可以完全控制文本转换为数据库参数的方式,而不是依赖数据库提供程序来完全按照您的意愿执行操作 - 如果它确实尝试执行那么< / em>,它可能没有。
(我还建议声明不同的变量,而不是对不同的参数重复使用相同的变量。)
答案 2 :(得分:1)
如果您将使用更容易:
cmd.Parameters.Add("@llnum", OleDbType.Integer, 12).Value =Convert.ToInt32(textbox.text);
问候!
答案 3 :(得分:0)
好吧,如果您有指定类型OleDbType.Integer
的参数,则必须提供整数值!
您在此处设置的只是另一个字符串:
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);
然后你需要一步一步地调试,找出错误发生在代码中的 where - 然后修复它。
答案 4 :(得分:0)
您有两个参数定义为Integer,但指定了一个字符串:
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,然后分配它。
答案 5 :(得分:0)
您应该使用Convert.ToInt32将整数参数转换为整数 你应该为所有非字符串的类型进行转换。因为TextBox.Text属性是字符串值。