Я использую Visual Studio 2012 и создал простое приложение. Я создал базу данных под названием Personnel с таблицей Employee. Я проработал все мои синтаксические ошибки, и код выглядит отлично, но моя форма - Form1.cs выдает ошибку, когда я пытаюсь вставить данные в базу данных с помощью формы.Синтаксическая ошибка SQL - неправильный синтаксис рядом с ''
После того, как я вставляю данные в поля - Идентификатор, Имя, Положение и Почасовую ставку оплаты, затем нажмите «Добавить», он захлебывается в поле «Позиция», и ошибка считывает все, что я набрал в это поле.
Например, если я ввожу «Менеджер» в этом поле формы, окно ошибки читает:
Неправильный синтаксис около «менеджер».
Любая помощь здесь будет принята с благодарностью. Вот мой код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Personnel
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'personnelDataSet.Employee' table. You can move, or remove it, as needed.
this.employeeTableAdapter.Fill(this.personnelDataSet.Employee);
}
private void btnAdd_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection(global::Personnel.Properties.Settings.Default.PersonnelConnectionString);
try
{
string sql = "INSERT INTO Employee (employeeID,Name,Position,HourlyPayRate) values("+txtemployeeID.Text+",'"+txtName.Text+",'"+txtPosition.Text+",'"+txtHourlyPayRate.Text+"')";
SqlCommand exeSQL = new SqlCommand(sql, cn);
cn.Open();
exeSQL.ExecuteNonQuery();
MessageBox.Show("New record added!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.employeeTableAdapter.Fill(this.personnelDataSet.Employee);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
cn.Close();
}
}
private void btnRef_Click(object sender, EventArgs e)
{
this.employeeTableAdapter.Fill(this.personnelDataSet.Employee);
}
}
}
Ваш синтаксис SQL отсутствует апостроф после одного из значений поля; Имя –
[SQL Injection alert] (http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - вы должны ** не ** объединить свои SQL-запросы - используйте ** параметризованные запросы ** вместо этого, чтобы избежать SQL-инъекции –
Плюс, что сказал @marc! –