ExecuteReader: свойство подключения не было инициализировано - PullRequest
38 голосов
/ 03 мая 2011

ExecuteReader: свойство подключения имеет не инициализирован.

моя кодировка

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

    }

Ответы [ 7 ]

64 голосов
/ 03 мая 2011

используйте это и передайте объект соединения:

 SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')",conn);
18 голосов
/ 03 мая 2011

После SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('.... Добавить

cmd.Connection = conn;

Надеюсь, что эта помощь

6 голосов
/ 03 мая 2011

Вы должны назначить соединение вашему объекту команды, например ..

SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')");
cmd.Connection = conn; 
3 голосов
/ 03 мая 2011

Вы также можете написать это:

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 голосов
/ 03 мая 2011

Все ответы верны. Это другой способ. И мне нравится этот

SqlCommand cmd = conn.CreateCommand()

Вы должны заметить, что у строк concat есть проблема с SQL-инъекцией. Используйте параметры http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

2 голосов
/ 03 мая 2011

Как уже упоминалось, вы должны назначить соединение, и вы должны вместо этого также использовать параметры sql, поэтому ваше назначение команды будет иметь следующий вид:

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

Используя параметры, вы избегаете внедрения SQL и других проблемных опечаток (имен проектов).например, myproject's).

0 голосов
/ 18 марта 2015

Мне нравится размещать все свои sql-соединения в using инструкциях. Я думаю, что они выглядят чище, и они убирают за собой, когда вы закончите с ними. Я также рекомендую параметризовать каждый запрос, он не только намного безопаснее, но и легче поддерживать, если вам нужно вернуться и внести изменения.

// 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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...