web-dev-qa-db-fra.com

ExecuteReader: la propriété de connexion n'a pas été initialisée

ExecuteReader: la propriété de connexion n'a pas été initialisée.

mon codage est

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

    }
38
jeni

utilisez-le et passez l'objet de connexion:

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

Après SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('.... Ajouter

cmd.Connection = conn;

J'espère que cette aide

18
FIre Panda

vous devez affecter une connexion à votre objet de commande, comme ..

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

Vous pouvez également écrire ceci:

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);
3
Jayeshwaree

Toutes les réponses sont vraies, c'est une autre façon. Et j'aime celui-ci

SqlCommand cmd = conn.CreateCommand()

vous devez remarquer que les chaînes concat ont un problème d'injection sql. Utilisez les paramètres http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

3
Saleh

Comme mentionné, vous devez attribuer la connexion et vous devez également utiliser de préférence des paramètres sql à la place, de sorte que votre affectation de commande se lirait:

    // 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
    //

En utilisant des paramètres, vous évitez l'injection SQL et d'autres fautes de frappe problématiques (les noms de projets comme "myproject's" en sont un exemple).

2
faester

J'aime placer toutes mes connexions sql dans les instructions using. Je pense qu'ils ont l'air plus propres, et ils se nettoient après avoir fini avec eux. Je recommande également de paramétrer chaque requête, non seulement elle est beaucoup plus sûre, mais elle est plus facile à maintenir si vous devez revenir et apporter des modifications.

// create/open connection
using (SqlConnection conn = new SqlConnection("Data Source=Si-6\\SQLSERVER2005;Initial Catalog=rags;Integrated Security=SSPI")
{
    try
    {
        conn.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;
        }
    }
}
0
Wayne