2011-05-03 19 views
31

ExecuteReader: la propiedad de conexión tiene no se ha inicializado.ExecuteReader: propiedad de conexión no se ha inicializado

mi codificación es

protected void Button2_Click(object sender, EventArgs e) 
    { 

     SqlConnection conn = new SqlConnection("Data Source=Si-6\\SQLSERVER2005;Initial Catalog=rags;Integrated Security=SSPI"); 

    SqlDataReader rdr = null; 

    try 
    { 
     // 2. Open the connection 
     conn.Open(); 

     // 3. Pass the connection to a command object 
     //SqlCommand cmd = new SqlCommand("select * from Customers", conn); 
     SqlCommand cmd=new SqlCommand ("insert into time(project,iteration) 
        values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')"); 

     // 
     // 4. Use the connection 
     // 

     // get query results 
     rdr = cmd.ExecuteReader(); 

     // print the CustomerID of each record 
     while (rdr.Read()) 
     { 
      Console.WriteLine(rdr[0]); 
     } 
    } 
    finally 
    { 
     // close the reader 
     if (rdr != null) 
     { 
      rdr.Close(); 
     } 

     // 5. Close the connection 
     if (conn != null) 
     { 
      conn.Close(); 
     } 
    } 
    } 
    } 

    } 
+0

Dado que los objetos SqlConnection, SqlCommand y SqlReader están utilizando los recursos no administrados y por lo tanto son objetos desechables que es una buena práctica para disponer de ellos cuando se lleva a cabo su tarea. Para que el código sea más legible, puede usar la directiva de uso para hacerlo. – Beatles1692

+0

Estas respuestas son correctas. Debe aceptarlas. Debe inicializar la propiedad de conexión sqlcommand con su conexión creada. – Saleh

Respuesta

54

uso esto y pasar a objeto de conexión:

SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')",conn); 
+0

hola gracias por la información ... también tuve otra aclaración sobre cómo obtener los controles html en C# – jeni

+0

si ha sido una serpiente .../suspiro – ruffin

6

tiene que asignar conexión con el objeto de comando, como ..

SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')"); 
cmd.Connection = conn; 
14

Después de SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('.... Añadir

cmd.Connection = conn; 

Esperanza esta ayuda

2

Como se ha mencionado que debe asignar la conexión y debe preferiblemente también utilizar parámetros SQL en lugar, por lo que su asignación de comando sería el siguiente:

// 3. Pass the connection to a command object 
    SqlCommand cmd=new SqlCommand ("insert into time(project,iteration) values (@project, @iteration)", conn); // ", conn)" added 
    cmd.Parameters.Add("project", System.Data.SqlDbType.NVarChar).Value = this.name1.SelectedValue; 
    cmd.Parameters.Add("iteration", System.Data.SqlDbType.NVarChar).Value = this.name1.SelectedValue; 

    // 
    // 4. Use the connection 
    // 

Mediante el uso de parámetros se evita la inyección SQL y otros errores tipográficos problemáticos (los nombres de proyectos como "myproject's" son un ejemplo).

3

También puede escribir lo siguiente:

SqlCommand cmd=new SqlCommand ("insert into time(project,iteration) values (@project, @iteration)", conn); 
cmd.Parameters.AddWithValue("@project",name1.SelectedValue); 
cmd.Parameters.AddWithValue("@iteration",iteration.SelectedValue); 
1

me gusta poner todas mis conexiones SQL en using declaraciones. Creo que se ven más limpios, y se limpian después de que terminen con ellos. También recomiendo parametrizar cada consulta, no solo es mucho más segura sino que es más fácil de mantener si necesita volver y hacer cambios.

// create/open connection 
using (SqlConnection conn = new SqlConnection("Data Source=Si-6\\SQLSERVER2005;Initial Catalog=rags;Integrated Security=SSPI") 
{ 
    try 
    { 
     oCn.Open(); 

     // initialize command 
     using (SqlCommand cmd = conn.CreateCommand()) 
     { 

      // generate query with parameters 
      with cmd 
      { 
       .CommandType = CommandType.Text; 
       .CommandText = "insert into time(project,iteration) values(@name, @iteration)"; 
       .Parameters.Add(new SqlParameter("@name", this.name1.SelectedValue)); 
       .Parameters.Add(new SqlParameter("@iteration", this.iteration.SelectedValue)); 
       .ExecuteNonQuery(); 
      } 
     } 
    } 
    catch (Exception) 
    { 
     //throw; 
    } 
    finally 
    { 
     if (conn != null && conn.State == ConnectionState.Open) 
     { 
      conn.Close; 
     } 
    } 
} 
Cuestiones relacionadas