2014-12-23 2 views
1
protected void Button1_Click(object sender, EventArgs e) 
    { 
     SqlConnection myConnection = new SqlConnection("server=VIVID-PC;Integrated Security = True;Database=SchoolDb"); 
     SqlCommand myCommand = new SqlCommand("Command String", myConnection); 
     myConnection.Open(); 

     string firstText = TextBox1.Text; 
     string SecondText = TextBox2.Text; 
     string thirdText = TextBox3.Text; 
     string fourthText = TextBox4.Text; 



     myCommand = new SqlCommand("INSERT INTO SchoolDb_Student(StudentName,RollNo,Session,MobileNo)values('" + firstText + "','" + SecondText + "' , '" + thirdText + "','" + fourthText + "')", myConnection); 
     myCommand.ExecuteNonQuery(); 

     myConnection.Close(); 

     Response.Redirect("/view.aspx"); 

    } 
+2

[SQL Injection] (http://www.w3schools.com/sql/sql_injection.asp) обнаружено. Использовать параметры команды –

+0

извините, я не могу получить вас. Помогите мне в конкретных я новичок. – Ashiq

+0

вы можете нажать на ссылку –

ответ

1
  1. Use command with parameters to pass data to server.
  2. Убедитесь выбрасыванием подключения и команды (via using statement)
  3. Store connection strings in config file
  4. Не создавать фиктивные объекты команд

Вот полный код:

using(var connection = new SqlConnection(connectionString)) 
using(var command = connection.CreateCommand()) 
{ 
    command.CommandText = 
     @"INSERT INTO SchoolDb_Student(StudentName,RollNo,Session,MobileNo) 
     VALUES (@studentName, @rollNo, @session, @mobileNo)"; 

    command.Parameters.AddWithValue("studentName", TextBox1.Text); 
    command.Parameters.AddWithValue("rollNo", TextBox2.Text); 
    command.Parameters.AddWithValue("session", TextBox3.Text); 
    command.Parameters.AddWithValue("mobileNo", TextBox4.Text); 

    connection.Open(); 

    try 
    { 
     command.ExecuteNonQuery(); 
    } 
    catch(SqlException e) 
    { 
     if (e.Message.Contains("Violation of UNIQUE KEY constraint")) 
      // you got unique key violation 
    } 
} 

Дальнейших соображений - улучшение имен в ваш код - TextBox1, TextBox2 и т. д. ничего не говорит читателю. Дайте им соответствующие имена, такие как StudentNameTextBox, RollNoTextBox и т. Д. Также хорошей практикой является разделение доступа к данным и логики пользовательского интерфейса.

+1

благодарит за вас предложения bro. – Ashiq

0

Если база данных обнаруживает нарушение уникального ключа, эта линия

myCommand.ExecuteNonQuery(); 

сгенерирует исключение. Вы можете поймать это исключение и продолжить свой собственный код:

try 
{ 
    myCommand.ExecuteNonQuery(); 
} 
catch(Exception e) 
{ 
    // right here, "something" went wrong. Examine e to check what it was. 
} 

Пожалуйста, обратите внимание, что ваш код уязвим для атак с внедрением SQL. Вы должны использовать командные параметры вместо создания SQL вручную. Кроме того, вы должны использовать блоки using (see here for details)

0

ExecuteNonQuery будет генерировать исключение, если он не может ввести строку INSERT в базу данных. В вашем случае это скорее всего SqlException. Лови.

+0

thnks для предложения – Ashiq

0

используйте returnType from ExecuteNonQuery() (ознакомьтесь с разделом примечаний), чтобы обнаружить отказ при вставке. вы можете использовать исключение или no. затронутых строки части

Попробуйте это:

try 
{ 
... your rest of the code 
... 
int rowsAffected = myCommand.ExecuteNonQuery(); // Most probaboly it will throw exception in case of Unique key violation. If not, still no rows have been affected 
if(rowsAffected<1) 
{ 
    //your Alert for no records inserted 
} 
else 
{ 
    //your alert for successful insertion 
} 

} 
catch(SqlException ex) 
{ 
//check the exception and display alert 
} 
finally 
{ 
    //release connection and dispose command object 
} 
+0

большое спасибо .... это помогло мне – Ashiq

+0

в любое время приятель, Happy Coding – Codeek

0

Как указывается в комментарии использование командных паров.

try 
{ 
    //Your other code 
    _myCommand.ExecuteNonQuery(); 
    myConnection.Close(); 
    Response.Redirect("/view.aspx"); 
} 
catch(SqlException sqlExc) 
{ 
// Your popup or msg. 
} 

Вы также выполняете цикл для различной ошибки sql в блоке catch.

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