Sqldataapter建议

发布于 2024-10-02 14:36:49 字数 3385 浏览 7 评论 0原文

目前,我有以下代码填充数据网格视图,显示我们系统上的用户帐户信息。我想要做的是在 datagridview 上有一个“accountenabled”选项的复选框,并在表单底部有一个更新按钮,这样它将更新所有对其进行了更改的用户。我目前正在使用 sqldatareader 拉回数据,但是从我读到的内容来看,我需要使用 sqldataadapter。我已经在 datagridview 上创建了列名称,并且阅读器当前正在正确地拉回所有内容。

有人可以指出我使用 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();
    }
}

}

At present i have a the following code populating a datagridview showing the user account information on our system. What i want to do do is have a checkbox on the datagridview for the option "accountenabled" and a update button at the bottom of the form so it will update all users that have had changes made against them. I am currently pulling the data back using an sqldatareader however from what i have read i need to use a sqldataadapter. I`ve created the column names on the datagridview and the reader is currently pulling everything back correctly.

Could someone please point me in the right direction of doing this with an sqldatadapter?

Thanks

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

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悲念泪 2024-10-09 14:36:49

使用 SqlDataReader 没有任何问题。 SqlDataAdapter 是一个更高级别的 API,它允许您迭代 SqlDataReader 并将结果的副本存储在 DataTable 或 DataSet 中。然后可以将该副本用作 DataGridView 的数据源。

我要对您的代码进行更改的一件事是使用数据绑定而不是手动生成每一行。如果将网格的 DataSource 属性设置为 SqlDataReader 或由 SqlDataAdapter 填充的 DataTable,然后调用网格 DataBind() 方法,则网格应自动填充您的数据。

要控制列,您需要确保查询仅返回所需的列,并且您需要在 aspx 文件中定义列设置。

使用数据绑定通常是一种更简单、更灵活的方法,因此您应该考虑使用它。

There is nothing wrong with using the SqlDataReader. The SqlDataAdapter is a higher level api that allows you to iterate through an SqlDataReader and store a copy of the results in a DataTable or a DataSet. This copy can then be used as the data source for your DataGridView.

One thing I would change with your code would be to use data binding instead of generating each row manually. If you set the DataSource property of the grid to either your SqlDataReader or to a DataTable filled by an SqlDataAdapter and then call the grids DataBind() method the grid should be filled automatically with your data.

To control the columns you would make sure your query only returns the required columns, and you would define the column setup in your aspx-file.

Using data binding is generally an easier and more flexible approach, so you should consider using that instead.

凉宸 2024-10-09 14:36:49

查看此代码

初始化 sql 适配器并填充数据源。使用连接字符串而不是使用 sql 数据源,因为这样更容易自定义。 :)

Look at this code

Initialize a sql adapter and fill with data source . Use a connection string other than using sql data source because it would be easy for customizing. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文