вставить в базу данных - PullRequest
       1

вставить в базу данных

0 голосов
/ 06 декабря 2010

Я убедился, что все относится к типам столбцов в базе данных, но я продолжаю получать исключение 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();
}

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

Используйте параметры для предотвращения внедрения 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

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

2 голосов
/ 06 декабря 2010

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

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

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

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

0 голосов
/ 06 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...