2016-05-24 2 views
0

Я хотел бы знать, правильно ли указана моя инструкция по обновлению SQL, потому что у меня есть форма, где я хочу редактировать некоторые данные. Но по какой-либо причине форма не сохраняет обновления, и ничего не происходит в db.Правильная инструкция по обновлению C#

Это мой код-за:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Data; 

public partial class edit : System.Web.UI.Page 
{ 
    SqlConnection con = new SqlConnection("Data Source=CASSIA-PC\\SQLEXPRESS;Initial Catalog=clientes;Integrated Security=True"); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     string v = Request.QueryString["id"]; 
     SqlCommand cmd = new SqlCommand("SELECT idCliente, nmCliente, fantasia, cpf, cep, logradouro, numero, complemento, bairro, cidade, estado, telefone, celular, insEstadual, insMunicipal, email, homePage, tbClientes.tpCliente, tbTipoClientes.idTipoCliente, tbTipoClientes.nmTipoCliente FROM tbClientes INNER JOIN tbTipoClientes ON tbClientes.tpCliente = tbTipoClientes.idTipoCliente WHERE idCliente = '" + v + "'", con); 
     try 
     { 
      con.Open(); 
      using (var reader = cmd.ExecuteReader()) 
      { 
       while (reader.Read()) { 
        txtId.Text = reader["idCliente"].ToString(); 
        txtNome.Text = reader["nmCliente"].ToString(); 
        txtFantasia.Text = reader["fantasia"].ToString(); 
        txtCPF.Text = reader["cpf"].ToString(); 
        txtCEP.Text = reader["cep"].ToString(); 
        txtLogradouro.Text = reader["logradouro"].ToString(); 
        txtNumero.Text = reader["numero"].ToString(); 
        txtComplemento.Text = reader["complemento"].ToString(); 
        txtBairro.Text = reader["bairro"].ToString(); 
        txtCidade.Text = reader["cidade"].ToString(); 
        txtEstado.Text = reader["estado"].ToString(); 
        txtTelefone.Text = reader["telefone"].ToString(); 
        txtCelular.Text = reader["celular"].ToString(); 
        txtInscEstadual.Text = reader["insEstadual"].ToString(); 
        txtInscMunicipal.Text = reader["insMunicipal"].ToString(); 
        txtEmail.Text = reader["email"].ToString(); 
        txtSite.Text = reader["homePage"].ToString(); 
       } 
      } 

      cmd.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     finally 
     { 
      con.Close(); 
     } 

    } 

    protected void btnEditar_Click(object sender, EventArgs e) 
    { 
     string v = Request.QueryString["id"]; 
     con.Open(); 
     SqlCommand cmd = new SqlCommand("UPDATE tbClientes SET nmCliente = '"+txtNome.Text+"', fantasia = '"+txtFantasia.Text+"', cpf = '"+txtCPF.Text+"', cep = '"+txtCEP.Text+"', logradouro = '"+txtLogradouro.Text+"', numero = '"+txtNumero.Text+"', complemento = '"+txtComplemento.Text+"', bairro = '"+txtBairro.Text+"', cidade = '"+txtCidade.Text+"', estado = '"+txtEstado.Text+"', telefone = '"+txtTelefone.Text+"', celular = '"+txtCelular.Text+ "', insEstadual = '"+txtInscEstadual.Text+"', insMunicipal = '"+txtInscMunicipal.Text+"', email = '"+txtEmail.Text+"', homePage = '"+txtSite.Text+"' WHERE idCliente = '" + v + "'", con); 
     try 
     { 
      cmd.ExecuteNonQuery(); 
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     finally 
     { 
      con.Close(); 
     } 
    } 
} 
+1

Попробуйте установить точку останова, чтобы вы могли проверить строку SQL, которую вы создаете, прежде чем пытаться ее выполнить. Проверьте синтаксис, попробуйте выполнить его вручную. Кроме того, вам нужно искать «sql injection», потому что у вашего кода есть довольно серьезные дыры в безопасности прямо сейчас. – Blorgbeard

+0

Действительно, это пустое. Но в Page_Load был получен параметр. –

+0

Поместите точку останова на cmd.ExecuteNonQuery() ;, затем проверьте значение cm.CommandText, чтобы увидеть фактический SQL, который вы отправляете на сервер. Если вы параметризировали команду, я бы предложил вам отредактировать свой вопрос, чтобы мы могли видеть, как вы это сделали, и где мы можем помочь. Видя весь код, мы помогаем вам –

ответ

3

Я уверен, что ваша проблема:

WHERE idCliente = '" + v + "'" 

Поскольку идентификатор клиента, скорее всего числовое поле в базе данных вы хотите рассматривать его как таковой:

WHERE idCliente = " + v 

Как Blorgbeard упоминает вам нужно использовать параметризованные команды protect against an SQL Injection attack. Это также позволит решить такие проблемы, как текстовые поля, содержащие апострофы и т. Д., Что также приведет к сбою вашего UPDATE.

+0

Джереми Томпсон, я использую теперь команды с параметрами в моей команде вставки кода. У меня есть столбец в моем db под названием «excluido», и я хочу установить это как «N». Например: cmd.Parameters.Add ("@ excluido", SqlDbType.NVarChar); cmd.Parameters ["@ excluido"]. Значение = "N"; –

+0

Используйте AddWithValue, его проще: 'cmd.Parameters.AddWithValue (" @ excluido "," N ");' и я не уверен, что еще вы хотите, чтобы ваш комментарий не вызывал сомнений. –

+0

Приветствия, просто убедитесь, что вы не сталкиваетесь с этим: «AddWithValue»: http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ –

0

Я согласен с Джереми, также лучше, если вы переходите на параметризованный запрос или задаете свой запрос меткой, копируете запрос и проверяете его непосредственно на SQL Server.

string query = "Update..." 

Скопируйте текст запроса и проверьте его непосредственно на SQL Server.

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