C # - Почему я получаю красный подчеркивает ошибки? - PullRequest
0 голосов
/ 02 ноября 2011

Я новичок в VS2010 & C #.

Мой этот код дает мне много красных подчеркиваний. Это какая-то глупая ошибка, но не могу понять, что это такое. Вот кодекс. "conn", "try", "rdr" - подчеркнуты красным, почему?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;



namespace WebApplication2
{   public class SqlConnectionDemo
    {

    SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI");

        SqlDataReader rdr = null;
          try 
        {

            conn.Open();
            SqlCommand cmd = new SqlCommand("select * from Customers", conn);
            rdr = cmd.ExecuteReader();


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

    public partial class WebForm2 : System.Web.UI.Page
    {
  protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {

        }
    }




}

Ответы [ 4 ]

5 голосов
/ 02 ноября 2011

Код в классе SqlConnectionDemo должен находиться в методе.

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

Кроме того, вы обычно не используете Console.WriteLine в приложении ; он предназначен для использования в .

2 голосов
/ 02 ноября 2011

Вы не можете поместить операторы кода непосредственно в тело класса, вы должны вставить его в метод, поэтому, например, я поместил ваш код для соединения в событие нажатия кнопки Button1:

        using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;



namespace WebApplication2
{   public class SqlConnectionDemo
    {

    SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI");



    public partial class WebForm2 : System.Web.UI.Page
    {
  protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)`enter code here`
        {
      SqlDataReader rdr = null;
      try {

          conn.Open();
          SqlCommand cmd = new SqlCommand("select * from Customers", conn);
          rdr = cmd.ExecuteReader();


          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();
          }
      }
  }
        }
    }
2 голосов
/ 02 ноября 2011

Код также должен быть в методе, вы не можете поместить код прямо в такой класс. Следуйте этой структуре

namespace a
{
    class b
    {
        public int c()
        {
            //Your code here
        }
    }
}

Называется так

var d = new b().c();
2 голосов
/ 02 ноября 2011

Обновление : Дох, неправильно прочитал исходный код, проблема в том, что код находится в области класса, а не внутри метода:

   public class SqlConnectionDemo
    {
        // NEED METHOD DECLARATION HERE
        public void SomeMethod()
        {
            SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI");

            SqlDataReader rdr = null;
            try
            {

                conn.Open();
                SqlCommand cmd = new SqlCommand("select * from Customers", conn);
                rdr = cmd.ExecuteReader();


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

Обновление Кстати, если все, что вам нужно, это попытаться / наконец убедиться, что вы закрыли / утилизировали соединение и считыватель и позволили исключению всплыть, используйте вместо этого блок using. Блок using будет вызывать Dispose() для переменной, указанной в нем, независимо от того, выходит ли он из области видимости нормально или выбрасывается исключение, он также является нулевым. Это просто удобное сокращение для блоков try/finally для всего, что реализует IDisposable:

    public void SomeMethod()
    {
        using (var conn = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI"))
        {
            conn.Open();
            using (var cmd = new SqlCommand("select * from Customers", conn))
            using (var rdr = cmd.ExecuteReader())
            {
                while (rdr.Read())
                {
                    Console.WriteLine(rdr[0]);
                }
            }
        }
    }

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

    public void SomeMethod()
    {
        using (var conn = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI"))
        {
            conn.Open();
            using (var cmd = new SqlCommand("select * from Customers", conn))
            using (var rdr = cmd.ExecuteReader())
            {
                var builder = new StringBuilder();

                while (rdr.Read())
                {
                    builder.Append(rdr[0]).Append(Environment.NewLine);
                }

                // assuming you are on the main thread here, if you're calling
                // from a parallel thread you spawned, you'd need to check if
                // invoke required, lot's of SO answers on how-to, etc if so.
                _resultsText.Text = builder.ToString();
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...