将sql server数据显示为16个文本块

本文关键字:16个 文本 显示 sql server 数据 | 更新日期: 2023-09-27 18:26:44

大家好,祝大家愉快。我在编码方面有一个问题,我有一长串代码,只显示从sql server到16个文本块的16个项目,没有错误,但我想保留这短串代码。以下是2个文本块(共16个)示例代码:

            orgDa.SelectCommand = conn.CreateCommand();
            orgDa.SelectCommand.CommandText = "select OrganizationName from Organizationtbl where OrgID=1";
            orgDa.SelectCommand.CommandType = CommandType.Text;
            orgDa.Fill(ds, "Organizationtbl");
            deptDa.SelectCommand = conn.CreateCommand();
            deptDa.SelectCommand.CommandText = "select DepartmentName from Departmenttbl where DeptID=1";
            deptDa.SelectCommand.CommandType = CommandType.Text;
            deptDa.Fill(ds, "Departmenttbl");
            if (ds.Tables["Organizationtbl"].Rows.Count == 1)
            {
                foreach (DataRow orgItem in ds.Tables["Organizationtbl"].Rows)
                {
                    if (orgItem.IsNull("OrganizationName"))
                    {
                        foreach (DataRow deptItem in ds.Tables["Departmenttbl"].Rows)
                        {
                            textblock_EventTitle0.Text = deptItem["DepartmentName"].ToString();
                        }
                    }
                    else
                    {
                        textblock_EventTitle0.Text = orgItem["OrganizationName"].ToString();
                    }
                }
            }
            else
            {
                foreach (DataRow deptItem in ds.Tables["Departmenttbl"].Rows)
                {
                    if (deptItem.IsNull("DepartmentName"))
                    {
                        foreach (DataRow orgItem in ds.Tables["Organizationtbl"].Rows)
                        {
                            textblock_EventTitle0.Text = orgItem["OrganizationName"].ToString();
                        }
                    }
                    else
                    {
                        textblock_EventTitle0.Text = deptItem["DepartmentName"].ToString();
                    }
                }
            }
            orgDa.SelectCommand = conn.CreateCommand();
            orgDa.SelectCommand.CommandText = "select OrganizationName from Organizationtbl where OrgID=2";
            orgDa.SelectCommand.CommandType = CommandType.Text;
            orgDa.Fill(ds, "Organizationtbl");
            deptDa.SelectCommand = conn.CreateCommand();
            deptDa.SelectCommand.CommandText = "select DepartmentName from Departmenttbl where DeptID=2";
            deptDa.SelectCommand.CommandType = CommandType.Text;
            deptDa.Fill(ds, "Departmenttbl");
            if (ds.Tables["Organizationtbl"].Rows.Count == 1)
            {
                foreach (DataRow orgItem in ds.Tables["Organizationtbl"].Rows)
                {
                    if (orgItem.IsNull("OrganizationName"))
                    {
                        foreach (DataRow deptItem in ds.Tables["Departmenttbl"].Rows)
                        {
                            textblock_EventTitle1.Text = deptItem["DepartmentName"].ToString();
                        }
                    }
                    else
                    {
                        textblock_EventTitle1.Text = orgItem["OrganizationName"].ToString();
                    }
                }
            }
            else
            {
                foreach (DataRow deptItem in ds.Tables["Departmenttbl"].Rows)
                {
                    if (deptItem.IsNull("DepartmentName"))
                    {
                        foreach (DataRow orgItem in ds.Tables["Organizationtbl"].Rows)
                        {
                            textblock_EventTitle1.Text = orgItem["OrganizationName"].ToString();
                        }
                    }
                    else
                    {
                        textblock_EventTitle1.Text = deptItem["DepartmentName"].ToString();
                    }
                }
            }

如何在一个循环中显示从sql到16个文本块的16个项目?我需要你的帮助。提前谢谢。

将sql server数据显示为16个文本块

通常,如果您有重复的代码,请尝试执行以下操作:

  1. 取一个项目的代码,将其移动到一个函数中。

  2. 查找每一项不同的内容:如查询、表名、列名、控件等。为每一项的方法添加一个参数,并用该参数替换代码中的每一项。

  3. 为每个项调用该方法一次,并传入正确的参数。

它基本上是两步重构:首先,提取方法。第二,提取参数。

然而,在您的情况下,OrgId和DeptID似乎主要发生了变化(以及要将值分配给的控件),因此请阅读参数化查询,例如。http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx

您提取的方法可能是这样的(未测试,也未编译):

    void LoadStuff(int id, TextBox control){
            orgDa.SelectCommand = conn.CreateCommand();
            orgDa.SelectCommand.CommandText = "select OrganizationName from Organizationtbl where OrgID=@orgId";
            orgDa.SelectCommand.CommandType = CommandType.Text;
            var parameter = orgDa.SelectCommand.CreateParameter();
            parameter.ParameterName = "@orgId";
            parameter.Value = id;
            orgDa.SelectCommand.AddParameter(parameter);
            orgDa.Fill(ds, "Organizationtbl");
            deptDa.SelectCommand = conn.CreateCommand();
            deptDa.SelectCommand.CommandText = "select DepartmentName from Departmenttbl where DeptID=@deptID";
            deptDa.SelectCommand.CommandType = CommandType.Text;
            parameter = orgDa.SelectCommand.CreateParameter();
            parameter.ParameterName = "@deptID";
            parameter.Value = id;
            orgDa.SelectCommand.AddParameter(parameter);
            deptDa.Fill(ds, "Departmenttbl");
            if (ds.Tables["Organizationtbl"].Rows.Count == 1)
            {
                foreach (DataRow orgItem in ds.Tables["Organizationtbl"].Rows)
                {
                    if (orgItem.IsNull("OrganizationName"))
                    {
                        foreach (DataRow deptItem in ds.Tables["Departmenttbl"].Rows)
                        {
                            control.Text = deptItem["DepartmentName"].ToString();
                        }
                    }
                    else
                    {
                        control.Text = orgItem["OrganizationName"].ToString();
                    }
                }
            }
            else
            {
                foreach (DataRow deptItem in ds.Tables["Departmenttbl"].Rows)
                {
                    if (deptItem.IsNull("DepartmentName"))
                    {
                        foreach (DataRow orgItem in ds.Tables["Organizationtbl"].Rows)
                        {
                            control.Text = orgItem["OrganizationName"].ToString();
                        }
                    }
                    else
                    {
                        control.Text = deptItem["DepartmentName"].ToString();
                    }
                }
            }
    }

然后称之为:

LoadStuff(1, textblock_EventTitle0);
LoadStuff(2, textblock_EventTitle1);
LoadStuff(3, textblock_EventTitle2);
....

或者用一些更聪明的循环。

当然,这还可以进一步简化。if-else结构的两个分支似乎有很多相似之处。