Проблема со строкой запроса и извлечением значений - PullRequest
2 голосов
/ 14 июня 2019

Я не могу извлечь значения с помощью запроса и вставить их в textbox es

Где я ошибаюсь?

 Request.QueryString.Get("ID_Persona");

 string query = "SELECT ID,Nome,Cognome,Email,CodiceFiscale FROM Persona WHERE ID = @id";

 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString))
       {         
           SqlCommand cmd = new SqlCommand(query, con);

           cmd.Parameters.AddWithValue("@ID","");
           cmd.Parameters.AddWithValue("@Nome", TextBox1.Text);
           cmd.Parameters.AddWithValue("@Cognome", TextBox15.Text);
           cmd.Parameters.AddWithValue("@Email", TextBox20.Text);
           cmd.Parameters.AddWithValue("@CodiceFiscale", TextBox22.Text);

           con.Open();

           cmd.ExecuteNonQuery();
       }

Ответы [ 3 ]

3 голосов
/ 14 июня 2019

Вам нужно использовать ExecuteReader для чтения значений, что-то вроде этого:

var connectionString = ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString;
string query = "SELECT ID,Nome,Cognome,Email,CodiceFiscale FROM Persona WHERE ID = @id";
using (SqlConnection con = new SqlConnection(connectionString))
{
    using (var cmd = new SqlCommand(query, con))
    {
      cmd.Parameters.AddWithValue("@ID", Request.QueryString.Get("ID_Persona"));
      con.Open();
      using (var rdr = cmd.ExecuteReader())
      {
          if (rdr.Read())
          {
              //IDTextBox? = rdr["Id"].ToString(),
              TextBox1.Text = rdr["Nome"].ToString(),
              TextBox15.Text = rdr["Cognome"].ToString(),
              TextBox20.Text= rdr["Email"].ToString(),
              TextBox22.Text= rdr["CodiceFiscale"].ToString(),    
          }
      }
   }
}
2 голосов
/ 14 июня 2019

Я вижу несколько проблем:

  1. Вы должны использовать ExecuteReader() вместо ExecuteNonQuery()
  2. Вы должны предоставить только 1 параметр - @ID;Я сомневаюсь, что оно должно иметь пустое значение.
  3. Вы должны обернуть IDisposable в using

Код:

   string query = 
     @"SELECT ID,
              Nome,
              Cognome,
              Email,
              CodiceFiscale 
         FROM Persona 
        WHERE ID = @id";

   using (SqlConnection con = new SqlConnection(...))
   {         
       con.Open();

       using SqlCommand cmd = new SqlCommand(query, con) 
       {
           // I doubt if you want empty Id here. 
           // I've assumed you want to pass ID_Persona
           cmd.Parameters.AddWithValue("@ID", Request.QueryString.Get("ID_Persona")); 

           using (var reader = cmd.ExecuteReader())
           {
               if (reader.Read()) 
               {
                   TextBox1.Text  = Convert.ToString(reader["Nome"]); 
                   TextBox15.Text = Convert.ToString(reader["Cognome"]); 
                   TextBox20.Text = Convert.ToString(reader["Email"]); 
                   TextBox22.Text = Convert.ToString(reader["CodiceFiscale"]);   
               }
           }
       }
  }
2 голосов
/ 14 июня 2019

Вы должны использовать ExecuteReader() вместо ExecuteNonQuery(), поскольку ExecuteNonQuery предназначено для операций DML.Опять же, вам нужно передать только значение ID, тогда почему вы передаете ненужные параметры в свой запрос.Убери их всех.Пример ниже

    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}", reader["Email"]));
    }
...