Member 14056530 Ответов: 3

Похоже, что моя кодировка неверна. Помогите кому-нибудь


Строка 32: {
Строка 33: }
Строка 34: SqlDataAdapter da = new SqlDataAdapter("Select * from tblStudent", con);
Строка 35: DataSet ds = новый набор данных();
Строка 36: da.Fill(ds);

Что я уже пробовал:

частный недействительными BindGridViewData()
{
строка CS = ConfigurationManager.Выберите["БСК"].Параметр connectionString;
using (SqlConnection con = new SqlConnection(CS))
{
}

SqlDataAdapter da = new SqlDataAdapter("Select * from tblStudent", con);
DataSet ds = новый набор данных();
да.Заполнить(ДС);
гвстудент.Источник данных = ds;
гвстудент.Привязку();

CPallini

Что ж, это неправильно, мы должны вам верить. Но вы не дали нам ни малейшего намека на это.

3 Ответов

Рейтинг:
1

Vincent Maverick Durano

Я хотел бы добавить несколько моментов к предоставленным решениям:

(1) DataSet состоит из DataTables, и так как вы выбирали только одну таблицу из вашего SQL SELECT запрос, то это имеет больше смысла использовать DataTable вместо DataSet.

(2) сделайте привычкой класть предметы, которые едят ресурсы, такие как SqlConnection, SqlCommand и SqlDataAdapter внутри блока использования, чтобы гарантировать, что объекты будут правильно утилизированы и после того, как они будут использованы.

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

string dbConnectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
string sqlStatement = "SELECT * FROM tblStudent";
using(SqlConnection connection = new SqlConnection(dbConnectionString)){
      using(SqlCommand cmd = new SqlCommand(sqlStatement ,connection)){
			using(SqlDataAdapter da = new SqlDataAdapter(cmd)){
				DataTable dt = new DataTable();
				da.Fill(dt);
				if(dt.Rows.Count > 0){
					gvStudent.DataSource = dt;
					gvStudent.DataBind();
				}
				else{
					//no result found		
				}		
			}
      }
}


Быстрый совет: Если вы связываете свои GridView в Вашем событии Page_Load, а затем убедитесь, что ваш код для привязки внутри !IsPostback блок:

protected void Page_Load(object sender, EventArgs e){
        if (!IsPostBack){
            // Your code for binding your GridView here
        }
}


Рейтинг:
1

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!


Рейтинг:
0

MadMyche

Да, ваш код неверен.

Попробуйте перенести свои операции с базой данных в using блок.
Вам также нужно будет открыть соединение, прежде чем пытаться заполнить набор данных

using (SqlConnection con = new SqlConnection(CS))
{ // SQL commands belong here. Don't forget to open/close the connection
}

SqlDataAdapter da = new SqlDataAdapter("Select * from tblStudent", con);


Richard Deeming

Вам не нужно открывать соединение, когда вы используете адаптер данных - адаптер данных сделает это за вас.

И вам не нужно явно закрывать соединение, если вы завернули его в using блок.

Vincent Maverick Durano

Добавляя к Ричарду, SqlDataAdapter должен быть завернут в a using блок тоже.