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值,不知道怎么写格式。希望大虾给予指点指点。
基于你的代码进行了修改,不建议直接拼接 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);
}
}
你的答案很好,但为什么会留下SQL注入漏洞呢?
@高级小白: 参考园子了的博文:C#和SQL注入字符串的攻击和防止注入字符转的攻击
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);
谢谢你的回复,你的也是测试成功的,并且给的建议也是中肯
这段代码你都能写出来了,不知道怎么取控件值?说不过去吧
因为我很菜啊,知识面太窄了