首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何参数化查询?

如何参数化查询?
EN

Stack Overflow用户
提问于 2011-02-23 15:50:35
回答 6查看 722关注 0票数 0
代码语言:javascript
复制
 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”。错误

EN

回答 6

Stack Overflow用户

发布于 2011-02-23 15:53:07

您将所有值都作为'string‘赋值给参数,这是不正确的。例如,您已将llnum参数声明为整数,因此分配给此参数的值应为整数:

代码语言:javascript
复制
    myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12);
    myParm.Value = Convert.ToInt32(textBox2.Text);
票数 1
EN

Stack Overflow用户

发布于 2011-02-23 15:55:07

你是从哪里得到这个错误的?您有各种非文本参数,但您仍然试图为它们提供文本参数值。

就我个人而言,我会自己执行解析,例如

代码语言:javascript
复制
myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12);
myParm.Value = int.Parse(textBox2.Text, ...); // Whatever options you want to use

这样,您就可以完全控制如何将文本转换为数据库参数,而不是依赖数据库提供程序完全按照您想要的方式进行转换-如果它确实尝试这样做的话,它可能不会这样做。

(我还建议声明不同的变量,而不是为不同的参数重用相同的变量。)

票数 1
EN

Stack Overflow用户

发布于 2011-02-23 15:56:32

如果您将使用以下命令,则会更容易:

代码语言:javascript
复制
cmd.Parameters.Add("@llnum", OleDbType.Integer, 12).Value =Convert.ToInt32(textbox.text);

致以问候!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5088256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档