我有一个从用户那里获取数据的网络表单。用户输入值并单击“添加”按钮。我想将用户输入的值插入数据库。但是当我运行该项目时。它在cmd.ExecuteNonQuery();
用户代码未处理SqlException:
关键字'of'附近的语法不正确。
问题是什么以及如何解决这个问题?
查询是:
insert into EMPLOYEES
(EMP_ID,
FIRST_NAME,
SECOND_NAME,
THIRD_NAME,
LAST_NAME,
GENDER,
DATE_OF_BIRTH,
PLACE_OF_BIRTH,
NATIONALITY,
PHONE_NUMBER,
DEPT_ID,
JOB_ID,
START_DATE)
values
('" + txtid.Text + "',
'" + txtFirst.Text + "',
'" + txtsecond.Text + "',
'" + txtthird.Text + "',
'" + txtlast.Text + "',
'" + s + "',
'" + txtdob.Text + "',
'" + txtPlace.Text + "',
'" + txtnat.Text + "',
'" + txtphone.Text + "',
'" + txtdep.Text + "',
'" + txtpos.Text + "',
'" + txtstart.Text + "')
答案 0 :(得分:4)
您不应该将SQL语句连接在一起 - 使用参数化查询来避免SQL注入以及语法错误。
以下是调整代码的方法:
string sql = @"INSERT INTO employees (emp_id,first_name, second_name , third_name , last_name , gender , date_of_birth , place_of_birth ,nationality , phone_number, dept_id , job_id , start_date)
VALUES(@emp_id,@first_name, @second_name , @third_name , @last_name , @gender , @date_of_birth , @place_of_birth ,@nationality , @phone_number, @dept_id , @job_id , @start_date)";
SqlCommand exeSQL = new SqlCommand(sql, cn);
cn.Open();
cmd.Parameters.AddWithValue("@emp_id", txtid.Text);
cmd.Parameters.AddWithValue("@first_name", txtFirst.Text);
cmd.Parameters.AddWithValue("@second_name", txtsecond.Text);
cmd.Parameters.AddWithValue("@third_name", txtthird.Text);
cmd.Parameters.AddWithValue("@last_name", txtlast.Text);
cmd.Parameters.AddWithValue("@gender", s);
cmd.Parameters.AddWithValue("@date_of_birth", txtdob.Text);
cmd.Parameters.AddWithValue("@place_of_birth", txtPlace.Text);
cmd.Parameters.AddWithValue("@nationality", txtnat.Text);
cmd.Parameters.AddWithValue("@phone_number", txtphone.Text);
cmd.Parameters.AddWithValue("@dept_id", txtdep.Text);
cmd.Parameters.AddWithValue("@job_id", txtpos.Text);
cmd.Parameters.AddWithValue("@start_date", txtstart.Text);
exeSQL.ExecuteNonQuery();