简体   繁体   English

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

[英]Problem with query string and extract values

I can't extract the values through a query and insert them into textbox es 我无法通过查询提取值并将它们插入到textbox

Where am I going wrong? 我哪里错了?

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

You need to use ExecuteReader to read values, something like this: 您需要使用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(),    
          }
      }
   }
}

You should use a ExecuteReader() instead of ExecuteNonQuery() since ExecuteNonQuery is meant for DML operations. 您应该使用ExecuteReader()而不是ExecuteNonQuery()因为ExecuteNonQuery用于DML操作。 Again, you need only the ID value to be passed then why you are passing unnecessary parameters to your query. 同样,您只需要传递ID值,然后将不必要的参数传递给查询。 Remove them all. 全部删除它们。 An example below 以下是一个例子

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

I can see several issues: 我可以看到几个问题:

  1. You should use ExecuteReader() instead of ExecuteNonQuery() 你应该使用ExecuteReader()而不是ExecuteNonQuery()
  2. You should provide just 1 parameter - @ID ; 你应该只提供1参数 - @ID ; I doubt if it should have an empty value. 我怀疑它是否应该有一个值。
  3. You should wrap IDisposable into using 你应该将IDisposable包装成using

Code: 码:

   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"]);   
               }
           }
       }
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM