首页 新闻 会员 周边

C#写入值得表达式报错

0
悬赏园豆:10 [已解决问题] 解决于 2019-05-06 14:39
rivate void button_Insert_Click(object sender, EventArgs e)
{
SqlConnection conn = BaseClass.DBConn.Company();
conn.Open();
DataSet ds = new DataSet();
int sum1, sum2;
sum1 = Convert.ToInt16(textBox_age.Text);
sum2 = Convert.ToInt16(textBox_power.Text);
//SqlCommand cmd = new SqlCommand("insert into tb_employee(name, number, password, age, position, sex) values ('j4p', 'Y12376', 'Y4', 24, 3, 'male')", conn);//直接输入值可以,
SqlCommand cmd = new SqlCommand("insert into tb_employee(name, number, password, age, position, sex) values ('textBox_name.Text', 'textBox_number.Text', 'textBox_pwd.Text', sum1, sum2,' textBox_male.Text')", conn);//输入表达式就不对了,不知道是不是格式不对。
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(ds);
//sum1=Convert.ToInt16(textBox_age.Text);
//sum2=Convert.ToInt16(textBox_power.Text);
}


如上代码所示,写入表达式表示值的时候报错,不知道是不是格式不对了,比如textBox_name.Text,我想输入此表达式的text值,不知道怎么写格式。希望大虾给予指点指点。

高级小白的主页 高级小白 | 初学一级 | 园豆:160
提问于:2019-05-05 08:50
< >
分享
最佳答案
0

基于你的代码进行了修改,不建议直接拼接 SQL 语句,会留下 SQL 注入漏洞

using (SqlConnection conn = BaseClass.DBConn.Company())
{
    conn.Open();
    DataSet ds = new DataSet();
    int sum1, sum2;
    sum1 = Convert.ToInt16(textBox_age.Text);
    sum2 = Convert.ToInt16(textBox_power.Text);
    using (SqlCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "insert into tb_employee(name, number, password, age, position, sex) values (@name, @number, @password, @age, @position, @sex)";
        cmd.Parameters.AddWithValue("@name", textBox_name.Text);
        cmd.Parameters.AddWithValue("@number", textBox_number.Text);
        cmd.Parameters.AddWithValue("@password", textBox_pwd.Text);
        cmd.Parameters.AddWithValue("@age", sum1);
        cmd.Parameters.AddWithValue("@position", sum2);
        cmd.Parameters.AddWithValue("@sex", textBox_male.Text);
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        sda.Fill(ds);
    }                
}
收获园豆:6
dudu | 高人七级 |园豆:30994 | 2019-05-05 10:30

你的答案很好,但为什么会留下SQL注入漏洞呢?

高级小白 | 园豆:160 (初学一级) | 2019-05-06 14:41

@高级小白: 参考园子了的博文:C#和SQL注入字符串的攻击和防止注入字符转的攻击

dudu | 园豆:30994 (高人七级) | 2019-05-06 14:43
其他回答(2)
0
  1. 你这写法是不对了,建议去详细看下ado.net的使用方法
  2. 建议学习一下ORM,可以节省大量时间降低学习成本
    随便改了下,如果有错误自己调一下:
            SqlCommand cmd = new SqlCommand("insert into tb_employee(name, number, password, age, position, sex) values (@name, @number, @password, @age, @position, @sex)", conn);//输入表达式就不对了,不知道是不是格式不对。
            cmd.Parameters.Add("@name", SqlDbType.Text);
            cmd.Parameters["@name"].Value = textBox_name.Text;                    //给参数sql语句的参数赋值
            cmd.Parameters.Add("@number", SqlDbType.Text);
            cmd.Parameters["@number"].Value = textBox_number.Text;                    //给参数sql语句的参数赋值
            cmd.Parameters.Add("@password", SqlDbType.Text);
            cmd.Parameters["@password"].Value = textBox_pwd.Text;                    //给参数sql语句的参数赋值
            cmd.Parameters.Add("@age", SqlDbType.Int);
            cmd.Parameters["@age"].Value = sum1;                    //给参数sql语句的参数赋值
            cmd.Parameters.Add("@position", SqlDbType.Int);
            cmd.Parameters["@position"].Value = sum2;                    //给参数sql语句的参数赋值
            cmd.Parameters.Add("@sex", SqlDbType.Text);
            cmd.Parameters["@sex"].Value = textBox_name.Text;                    //给参数sql语句的参数赋值
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
收获园豆:4
皓月空 | 园豆:723 (小虾三级) | 2019-05-05 10:07

谢谢你的回复,你的也是测试成功的,并且给的建议也是中肯

支持(0) 反对(0) 高级小白 | 园豆:160 (初学一级) | 2019-05-06 14:41
0

这段代码你都能写出来了,不知道怎么取控件值?说不过去吧

jqw2009 | 园豆:2439 (老鸟四级) | 2019-05-05 15:14

因为我很菜啊,知识面太窄了

支持(0) 反对(0) 高级小白 | 园豆:160 (初学一级) | 2019-05-06 14:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册