2010-12-05 9 views
0

Я убедился, что все относится к типам столбцов в базе данных, но я продолжаю получать исключение SQLCeException. Может ли кто-нибудь сказать мне, что не так с этим кодом?Вставить в базу данных

private void ANDPaddDriverButton_Click(object sender, EventArgs e) 
{ 
    string first = ANDPfirstNametextBox.Text; 
    string last = ANDPlastNametextBox.Text; 
    string mid = textBox5.Text; 
    string phone = ANDPphonetextBox.Text; 
    string social = ANDPsSNtextBox.Text; 
     // EmployeeType="Employee" 
    string city = ANDPCityTextbox.Text; 
    string state = ANDPStatetextBox.Text; 
    string zip = ANDPzipCodetextbox.Text; 
    string email = ANDPemailtextBox.Text; 
    string address = ANDPaddressTextBox.Text; 
    string user = userName.Text; 

    DBConn.Open(); 
    SqlCeCommand cmd = new SqlCeCommand("INSERT INTO [Employee Table] VALUES (" + 
      first + "," + last + "," + mid + "," + address + "," + phone + "," + social + "," 
       + "Employee" + "," + city + "," + state + "," + zip + "," + email + "," + userName + ")", DBConn); 
    cmd.ExecuteNonQuery(); 
    DBConn.Close(); 
} 
+4

Он получил SQL Injection отверстие, и плохое имя таблицы. – SLaks 2010-12-05 23:28:50

ответ

2

Ваши поля типа string/varchar должны быть заключены в одинарные кавычки!

SqlCeCommand cmd = new SqlCeCommand("INSERT INTO [Employee Table] VALUES (" + 
    "'" + first + "'," 

и так далее ...

Кроме того, как кто-то другой уже комментировал вы собираетесь значительно выставить свой код для атак путем внедрения SQL

+7

** Нет. ** Он должен использовать параметры. – SLaks 2010-12-05 23:30:18

0

Как сказал Лоренцо, строковые значения должны быть заключен в одинарные кавычки, но, пожалуйста, прочтите this page, в котором объясняется, почему вы не должны строить запрос таким образом и показывает, как это сделать с параметрами.

3

Используйте параметры для предотвращения инъекции SQL, а имена столбцов, потому что вы полагаетесь в количестве и порядке столбцов вашей таблицы и, скорее всего, изменится в будущем (я предполагаю, что имена столбцов):

SqlCeCommand cmd = new SqlCeCommand("INSERT INTO [Employee Table] (First, Last, Mid, Address, Phone, Social, Employee, City, State, Zip, Email, UserName) VALUES (@First, @Last, @Mid, @Address, @Phone, @Social, @Employee, @City, @State, @Zip, @Email, @UserName)", DBConn); 
cmd.Parameters.AddWithValue("@First", first); 
cmd.Parameters.AddWithValue("@Last", last); 
cmd.Parameters.AddWithValue("@Mid", mid); 
cmd.Parameters.AddWithValue("@Address", address); 
cmd.Parameters.AddWithValue("@Phone", phone); 
// etc. each column 

Кстати стараются не использовать пробелы в таблице и столбцы имен ;-)

Смежные вопросы