将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个项目?我需要你的帮助。提前谢谢。
通常,如果您有重复的代码,请尝试执行以下操作:
-
取一个项目的代码,将其移动到一个函数中。
-
查找每一项不同的内容:如查询、表名、列名、控件等。为每一项的方法添加一个参数,并用该参数替换代码中的每一项。
-
为每个项调用该方法一次,并传入正确的参数。
它基本上是两步重构:首先,提取方法。第二,提取参数。
然而,在您的情况下,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结构的两个分支似乎有很多相似之处。