2013-08-22 2 views
2

Я написал следующий код, но ничего не вставляется в базу данных.Команда Sql не работает

Я попытался сменить пароль SA в строке подключения на что-то неправильное, и код не поймал исключение.

Что я делаю неправильно?

protected void Button2_Click(object sender, EventArgs e) 
{ 
    firstName = TextBox1.Text; 
    lastName = TextBox2.Text; 
    collegeName = TextBox3.Text; 
    majorSubject = TextBox4.Text; 
    emailAddress = TextBox5.Text; 
    phoneNumber = TextBox6.Text; 
    address = TextBox7.Text; 
    city = TextBox8.Text; 
    state = DropDownList1.SelectedValue; 
    zipCode = TextBox9.Text; 
    interestDate = DateTime.Now.ToString("M/d/yyyy"); 

    string completedString = " " +firstName+ " " +lastName+ " " +collegeName+ " " +majorSubject+ " " +emailAddress+ " " +phoneNumber+ " " +address+ " " +city+ " " +state+ " " +zipCode+ " " +interestDate+ "."; 
    ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + completedString + "');", true); 

    try 
    { 

    string strCon = "Data Source=OMIW2310.orthman.local;Initial Catalog=CollegeRecruiting;User Id=sa;Password=myPassword;"; 
    using (var connection = new SqlConnection(strCon)) 
    { 

     string strSQL = "USE CollegeRecruiting INSERT INTO Students (lastName, firstName, collegeName, majorSubject, emailAddress, phoneNumber, address, city, state, zip, interestDate) VALUES ('" + firstName + "', '" + lastName + "', '" + collegeName + "', '" + majorSubject + "', '" + emailAddress + "', '" + phoneNumber + "', '" + city + "', '" + state + "', '" + zipCode + "', '" + interestDate + "')"; 
     SqlCommand command = new SqlCommand(strSQL, connection); 

     connection.Open(); 
     command.ExecuteNonQuery(); 
     connection.Close(); 

     } 
    } 
    catch (SqlException ex) 
    { 
     ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + ex.Message + "');", true); 
    } 

    ClearTextBoxes();   

} 
+4

Я хотел бы познакомить вас с моим другом «Бобби»; Студенты DROP TABLE; --'. – RoadieRich

+0

Я действительно надеюсь, что пароль для вашей учетной записи sa на самом деле не «myPassword». Если это так, я уверен, что ваши ученики с радостью изменят его, если они это видят ... Вам нужно также изучить атаки SQL Injection ... –

ответ

3

Как указано OP в комментариях. Как только try-catch был разрешен, было обнаружено, что это просто несоответствующее количество полей и значений.

Просто FYI, вы можете избавиться от этого:

USE CollegeRecruiting 

Это уже использует правильную базу данных из-за связи, которую вы создали над ним.

И, наконец, не оставляйте себя открытым для SQL-инъекций. Перепишите код, чтобы быть чем-то больше вдоль этих линий:

using (SqlConnection c = new SqlConnection(connString)) 
using (SqlCommand cmd = new SqlCommand("INSERT INTO ... VALUES (@field1...)"), c) 
{ 
    cmd.Parameters.AddWithValue("@field1", txtField1.Text); 

    c.Open(); 
    cmd.ExecuteNonQuery(); 
} 
+0

Нет, это не сработало. – CryptoJones

+0

@CryptoJones, вы получаете исключение? Если вы положите точку останова на эту строку, вы даже доберетесь туда? –

+0

Как только я исправил свое заявление try/catch, это показало мне, что у меня было несоответствующее количество INSERTS/VALUES. Благодарим вас за помощь! – CryptoJones

2

Удалите USE CollegeRecruiting до INSERT заявления.

Также используйте parameterized запросы для предотвращения атак SQL-инъекций.

Например:

command.CommandText = "INSERT INTO Students (lastName, firstName VALUES (@lastName, @firstname);"; 

    command.Parameters.AddWithValue("@lastName", lastName); 
    command.Parameters.AddWithValue("@firstName", firstName); 

Примечание: Вы входите в last name в первом столбце имя и наоборот.

+0

Нет, это не сработало. – CryptoJones

+0

@CryptoJones - вы получаете сообщение об ошибке? –

0

Как только я исправил выписку, итоговая ошибка показала мне, что у меня было несоответствующее количество INSERTS/VALUES.

Теперь я буду параметризовать свой запрос, чтобы предотвратить атаки SQL Injection.

Спасибо за помощь всем!

CJ

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