查询字符串和提取值的问题

Problem with query string and extract values

我无法通过 查询 提取值并将它们插入 textboxes

我哪里错了?

 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();
       }

您应该使用 ExecuteReader() 而不是 ExecuteNonQuery(),因为 ExecuteNonQuery 用于 DML 操作。同样,您只需要传递 ID 值,然后再将不必要的参数传递给查询。全部删除。下面的例子

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

您需要使用 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(),    
          }
      }
   }
}

我可以看到几个问题:

  1. 您应该使用 ExecuteReader() 而不是 ExecuteNonQuery()
  2. 您应该只提供 1 参数 - @ID;我怀疑它是否应该有一个 empty 值。
  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"]);   
               }
           }
       }
  }