2015-12-08 5 views
0

Привет, У меня возникли проблемы с созданием кнопки обновления для моего сайта. Я пробовал много методов, но, похоже, не могу понять. Я хотел бы, чтобы пользователь вводил идентификационный номер клиента, который они хотят обновить, затем заполните текстовое поле в соответствии с столбцами, которые они хотят изменить.Как обновить запись базы данных vs12 C#

Вот мой код:

private static OleDbConnection GetConnection() 
{ 
    String connString; 
    connString = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\Users\Wisal\Documents\Visual Studio 2012\WebSites\WebSite3\registration-Db.mdb"; 

    return new OleDbConnection(connString); 
} 

protected void clientUpdate_Click(object sender, EventArgs e) 
{ 
    OleDbConnection cn = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:/Users/Wisal/Documents/Visual Studio 2012/WebSites/WebSite3\registration-Db.mdb"); 

    cn.Open(); 
    OleDbCommand cmd = new OleDbCommand("(Update client set id = " + txt_id.Text + " ,[name] ='" + txt_name.Text + " ,[password] ='" + txt_password.Text +" where id= '" + txt_id.Text + "",cn); 
    cmd.ExecuteNonQuery(); 
    cn.Close(); 
    }  
} 

Я также попытался это:

private static OleDbConnection GetConnection() 
{ 
    String connString; 
    connString = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\Users\Wisal\Documents\Visual Studio 2012\WebSites\WebSite3\registration-Db.mdb"; 

    return new OleDbConnection(connString); 

} 

protected void clientUpdate_Click(object sender, EventArgs e) 
{ 
    OleDbConnection myConnection = GetConnection(); 

    myConnection.Open(); 
    OleDbCommand cmd = new OleDbCommand("(Update client set id = " + txt_id.Text + " ,[name] ='" + txt_name.Text + " ,[password] ='" + txt_password.Text +" where id= '" + txt_id.Text + "",myConnection); 
    cmd.ExecuteNonQuery(); 
    myConnection.Close(); 
    } 
} 

С этим я получаю "ошибка синтаксиса в накидной запросе."

Я попытался это тоже:

protected void clientUpdate_Click(object sender, EventArgs e) 
{ 
    OleDbConnection myConnection = GetConnection(); 

    myConnection.Open(); 
    OleDbCommand cmd = new OleDbCommand("Update client set [name] = ? [password] = ? where id= ?", myConnection); 
    cmd.Parameters.AddWithValue("", txt_id.Text); 
    cmd.Parameters.AddWithValue("", txt_name.Text); 
    cmd.Parameters.AddWithValue("", txt_password.Text); 
    cmd.ExecuteNonQuery(); 
    myConnection.Close(); 
    } 

    } 
+0

Вы должны поймать любое исключение, но кажется, что в вашей строке sql отсутствует много (одна кавычка). –

+0

У вас несколько проблем с безопасностью. Вам нужно использовать параметризованные запросы, и пароли никогда не должны храниться в открытом тексте в базе данных (вместо этого используйте соленые односторонние хэши). – mason

+0

Посмотрите на свой CommandText, скорее всего, это причина вашего исключения. – KiwiPiet

ответ

2

Я обновил свой код немного:

private static OleDbConnection GetConnection() 
{ 
    var connString = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\Users\Wisal\Documents\Visual Studio 2012\WebSites\WebSite3\registration-Db.mdb"; 

    return new OleDbConnection(connString); 
} 

protected void clientUpdate_Click(object sender, EventArgs e) 
{ 
    using(var myConnection = GetConnection()) 
    { 
     myConnection.Open(); 
     // You should be using a parameterized query here 
     using (var cmd = new OleDbCommand("Update client set [name] = ?, [password] = ? where id = ?", myConnection)) 
     { 
      cmd.Parameters.AddWithValue("name", txt_name.Text); 
      cmd.Parameters.AddWithValue("password", txt_password.Text); 
      cmd.Parameters.AddWithValue("id", txt_id.Text); 

      cmd.ExecuteNonQuery(); 
     } 
    } 
} 
  • Используйте с использованием блоков вокруг одноразовых предметов
  • Проверьте SQL, нет необходимости обновлять идентификатор если это ваш первичный ключ и будьте осторожны с одинарными кавычками. Вместо этого используйте параметризованные запросы.
+0

[OLEDB Parameterized Query] (http://stackoverflow.com/questions/12048152/oledb-parameterized-query) – KiwiPiet

+0

Я отредактирую свой код и покажу вам, как я это сделал, потому что я получаю ошибки, когда делаю это –

0

Ваш апостроф не соответствует?

Является ли ваш id полем типа int или string? Я предполагаю, что это тип int. И вам не нужно обновлять поле id, так как оно совпадает с значением в where where.

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

OleDbCommand cmd = new OleDbCommand("Update client set [name] ='" + txt_name.Text + "' ,[password] ='" + txt_password.Text +"' where id= " + txt_id.Text,myConnection); 
+0

Да, это сделал трюк! спасибо @Ricky –

+0

странно, как только информация была обновлена, gridview не обновляет базу данных, даже когда я обновляю страницу hmm. –

+0

, когда я обновляю запись, например, я обновляю столбец имен, а не «пароль», тогда данные столбца пароля будут исчезать. любая идея о том, как разрешить это? @Ricky –

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