Sqldataapter совет - PullRequest
       1

Sqldataapter совет

0 голосов
/ 12 ноября 2010

В настоящее время у меня есть следующий код, заполняющий таблицу данных, показывающую информацию об учетной записи пользователя в нашей системе. То, что я хочу сделать, это установить флажок в datagridview для опции «accountenabled» и кнопку обновления внизу формы, чтобы она обновляла всех пользователей, которые внесли изменения в них. В настоящее время я получаю данные обратно с помощью sqldatareader, однако из того, что я прочитал, мне нужно использовать sqldataadapter. Я создал имена столбцов в представлении данных, и читатель в настоящее время корректно извлекает все данные обратно.

Может ли кто-нибудь указать мне правильное направление действий с помощью sqldatadapter?

Спасибо

public UserAdmin()
    {
        InitializeComponent();

        //Load user list

        // Locals
        Functionality func = new Functionality();
        SqlConnection supportDB = null;
        SqlCommand CheckUser = null;
        SqlDataReader rdr;
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();

        string User = System.Environment.UserName.ToString();
        string spName = "gssp_ShowAllUsers";

        try
        {
            using (supportDB = new SqlConnection(GSCoreFunc.ConnectionDetails.getConnectionString(ConnectionType.SupportDB)))
            {
                using (CheckUser = new SqlCommand(spName, supportDB))
                {
                    // Set the command type
                    CheckUser.CommandType = CommandType.StoredProcedure;

                    // Populate the parameters.
                    CheckUser.Parameters.Add(func.CreateParameter("@spErrorID", SqlDbType.Int, ParameterDirection.Output, DBNull.Value));

                    // Open the connection and populate the reader with the SP output
                    supportDB.Open();
                    rdr = CheckUser.ExecuteReader();
                    if (CheckUser.Parameters["@spErrorID"].Value != null)
                    {
                        throw new InvalidOperationException();
                    }

                    // If the data reader has rows display output on label
                    if (rdr.HasRows)
                    {
                        //Output values
                        while (rdr.Read())
                        {
                            //Bind to data table
                            dgvUsers.Rows.Add(rdr["agentID"].ToString(), rdr["createdon"].ToString(), rdr["firstname"].ToString(), rdr["lastname"].ToString(), rdr["username"].ToString(), rdr["emailaddress"].ToString(), rdr["Departments"].ToString(), rdr["accountenabled"].ToString(), rdr["AgentAccountLevel"].ToString());
                        }
                    }

                    // Close reader and connection.
                    rdr.Close();
                    supportDB.Close();
                }
            }
        }

        catch (Exception ex)
        {
            //Show error message
            string error = ex.ToString(); //Real error
            string FriendlyError = "There has been error loading the user list"; // Error user will see
            GSCoreFunc.ShowMessageBox.msgBoxErrorShow(FriendlyError);

            //Log error to ExceptionDB
            GSCoreFunc.ReportException.reportEx(GSCoreFunc.ApplicationInformation.ApplicationName, error, FriendlyError, GSCoreFunc.ApplicationInformation.ComputerName, GSCoreFunc.ApplicationInformation.OperatingSystem, GSCoreFunc.ApplicationInformation.screenSize, GSCoreFunc.ApplicationInformation.IPAdddress, GSCoreFunc.ApplicationInformation.domainName);// Pass error to GSCoreFunc to log to the ExceptionDB
        }
    }

    private void btClose_Click(object sender, EventArgs e)
    {
        //Close window
        Close();
    }
}

}

Ответы [ 2 ]

0 голосов
/ 12 ноября 2010

Посмотрите на этот код

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

0 голосов
/ 12 ноября 2010

Нет ничего плохого в использовании SqlDataReader. SqlDataAdapter - это API-интерфейс более высокого уровня, который позволяет перебирать SqlDataReader и сохранять копию результатов в DataTable или DataSet. Затем эту копию можно использовать в качестве источника данных для вашего DataGridView.

Одна вещь, которую я бы изменил в вашем коде, это использование привязки данных вместо генерации каждой строки вручную. Если для свойства DataSource сетки задано значение SqlDataReader или DataTable, заполненное SqlDataAdapter, а затем вызывается метод DataBind () grid, сетка должна автоматически заполняться вашими данными.

Для управления столбцами вы должны убедиться, что ваш запрос возвращает только необходимые столбцы, и вы должны определить настройку столбца в вашем aspx-файле.

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

...