ExecuteReader: свойство соединения не было инициализировано

#c# #asp.net #sql-server-2005

#c# #asp.net #sql-server-2005

Вопрос:

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

    }
  

Комментарии:

1. Поскольку объекты SqlConnection, SqlCommand и SqlReader используют неуправляемые ресурсы и, следовательно, являются одноразовыми объектами, рекомендуется утилизировать их, когда их задача выполнена. Чтобы сделать код более читаемым, вы можете использовать директиву using для этого.

2. Эти ответы верны. вы должны согласиться. вы должны инициализировать свойство подключения sqlcommand с вашим созданным подключением.

Ответ №1:

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

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

Комментарии:

1. привет, спасибо за информацию .. у меня было и другое разъяснение, как получить HTML-элементы управления на c#

Ответ №2:

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

 cmd.Connection = conn;
  

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

Ответ №3:

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

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

Ответ №4:

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

 SqlCommand cmd = conn.CreateCommand()
  

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

Ответ №5:

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

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

Ответ №6:

Как уже упоминалось, вы должны назначить соединение, и желательно также использовать параметры 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»).

Ответ №7:

Мне нравится размещать все мои 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 amp;amp; conn.State == ConnectionState.Open)
        {
            conn.Close;
        }
    }
}
  

Комментарии:

1. Что такое «oCn» и почему существует «with» или что он делает?

2. «with» — это то, что я ленив и не набираю cmd. для следующих пяти команд и oCn была опечатка… Это было соглашение об именовании объектов connection в моей работе. Спасибо.