Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为查询参数化?_C# - Fatal编程技术网

C# 如何为查询参数化?

C# 如何为查询参数化?,c#,C#,这就是我参数化字段的方式,但我得到“无法将参数值从字符串转换为Int32”。错误您将所有值作为“字符串”分配给参数,这是不正确的。 例如,您已将llnum参数声明为整数,因此分配给此参数的值应为整数: private void button1_Click(object sender, EventArgs e) { OleDbCommand cmd = new OleDbCommand(); cmd.CommandType = CommandType.Te

这就是我参数化字段的方式,但我得到“无法将参数值从字符串转换为Int32”。错误

您将所有值作为“字符串”分配给参数,这是不正确的。 例如,您已将
llnum
参数声明为整数,因此分配给此参数的值应为整数:

 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();
    }

您将所有值作为“字符串”分配给参数,这是不正确的。 例如,您已将
llnum
参数声明为整数,因此分配给此参数的值应为整数:

 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();
    }

如果您有指定type
OleDbType.Integer
的参数,那么必须提供一个Integer

这里设置的只是另一个字符串:

    myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12);
    myParm.Value = Convert.ToInt32(textBox2.Text);
您需要这样做:

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

然后你需要一步一步地调试,找出错误发生在代码中的什么地方,然后修复它。

好吧,如果你有参数指定type
OleDbType.Integer
,你必须提供一个Integer

这里设置的只是另一个字符串:

    myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12);
    myParm.Value = Convert.ToInt32(textBox2.Text);
您需要这样做:

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);
这样,您就可以完全控制文本如何转换为数据库参数,而不是依赖数据库提供程序按照您想要的方式进行转换—如果它确实尝试这样做,它可能不会

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

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

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

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12);
myParm.Value = Convert.ToInt32(textBox2.Text);
这样,您就可以完全控制文本如何转换为数据库参数,而不是依赖数据库提供程序按照您想要的方式进行转换—如果它确实尝试这样做,它可能不会


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

您有两个定义为整数的参数,但要分配一个字符串:

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

您应该首先将textBox2.Text的值转换为int,然后分配它。

您有两个定义为整数的参数,但分配了一个字符串:

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

您应该首先将textBox2.Text的值转换为int,然后将其赋值。

如果您使用:

    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("@llnum", OleDbType.Integer, 12);
    myParm.Value = textBox2.Text;
    myParm = cmd.Parameters.Add("@mobnum", OleDbType.Integer, 12);
    myParm.Value = textBox2.Text;

问候

应使用convert.ToInt32将整数参数转换为整数
您应该对所有不是字符串的类型进行转换。因为TextBox.Text属性是字符串值。

您应该使用convert.ToInt32将整数参数转换为整数
您应该对所有不是字符串的类型进行转换。因为TextBox.Text属性是一个字符串值。

哦,天哪。。来自asp.net/forum的代码开始出现在stackoverflow上。。那是萨德天哪。。来自asp.net/forum的代码开始出现在stackoverflow上。。是的,现在我已经纠正了两个参数,它们必须是整数,并且运行了程序。当我输入数据并按下add按钮时,我在INSERT-INTO语句中得到语法错误。然后,INSERT语句中出现错误。尝试在每列周围设置[]。可能您的某个列是保留字。“@e-mail”是失败的参数。将其重命名为“@Email”,不带引号。是的,现在我已更正了两个必须为整数的参数,并运行了程序。当我键入数据并按add按钮时,INSERT-INTO语句中出现语法错误。然后,INSERT语句中出现错误。尝试在每列周围设置[]。可能您的某个列是保留字。“@e-mail”是失败的参数。将其重命名为“@Email”,不带引号。