需求简单理解:处理Excel文档数据。B1,C1,D1代表的是三个不同表(t_base_material,t_base_product,t_base_end)的desc字段(material_desc,product_desc,end_desc),红色部分是对应的desc值,根据这些值查找对应三个不同表中该code(material_code,product_code,end_code)字段值,在A列处拼接出一个总的code.
进一步理解需求:
问题:如何写一个通用的方法,把这可能出现的参数(3<=x<=15)传递进去?
目前进展:
三个的已经解决(为了测试)。最终需要动态传递参数(3<=x<15)的没有解决.
解决方法用的是固定模版的形式,固定了三个参数,把对应的表名,desc字段名,code名固定好,for循环来拼SQL语句。
有朋友说用hashtable,有的说是用数组参数。有例子吗?或者有更好的其他方法来解决这个需求?
能否举个三个字段的实际的例子,即你生成的 sql 是什么样的。
select material_code from t_base_material where material_desc='A403GR.WP315';
select product_code from t_base_product where product_desc='SMLS';
select end_code from t_base_end where end_desc='BE/MJ';
.....
.....
@smallbird2012: 然后你想要的方法的签名给写出来下,指明输入和输出。
这个是三个固定desc形式的目前处理方式。@Launcher:
@smallbird2012: 也就是说,按照你的 excel 表的形式,每读入一行记录,你就需要生成下列 sql 语句:
select B_Code from B_Table where B_Field = '1'
select C_Code from C_Table where C_Field = '2'
select D_Code from D_Table where D_Field = '3'
select E_Code from E_Table where E_Field = '4'
select F_Code from F_Table where F_Field = '5'
select G_Code from G_Table where G_Field = '6'
select H_Code from H_Table where H_Field = '7'
.....
select N_Code from N_Table where N_Field = 'N'
对吗?
@Launcher:
就是这样的需求。
而且更甚:
在一张excel的sheet1中,前10行数据可能N=5,5个字段(第一行是5个字段,后面9行是数据)。接着可能在第11行之后的数据,变成了N=3,3个字段的数据(第11行是3个字段,第12行是对应的数据),接着可能第13行,是N=15,15个字段的数据(第13行是15个字段,后面的行是对应的数据)。
所以我需要一个动态的参数来传递N_FIield字段。这样在遇到第1行,第11行,第12行时,能够动态的读取字段,来形成
select B_Code from B_Table where B_Field = '1'
select C_Code from C_Table where C_Field = '2'
select D_Code from D_Table where D_Field = '3'
select E_Code from E_Table where E_Field = '4'
select F_Code from F_Table where F_Field = '5'
select G_Code from G_Table where G_Field = '6'
select H_Code from H_Table where H_Field = 'N'
.....
select N_Code from N_Table where N_Field = '1'
@smallbird2012: 用 Dictionary 来存你的字段和查询语句,比如,简单的可以这样:
Dictionary<string,string> cmdTexts = new Dictionary<string,string>();
cmdTexts.Add("Material_desc","select Material_code from Material where Material_desc = '{0}'");
cmdTexts.Add("Product_desc","select Product_code from Product where Product_desc = '{0}'");
cmdTexts.Add("End_desc","select End_code from End where End_desc = '{0}'");
上面的代码可以从你的第三个excel 表(固定模板)来创建。
然后你的代码可以这样写,dt 就应该是你从你的第一个表查询的数据,对吧:
int columnCount = dt.Columns.Count;
int rowCount = dt.Rows.Count;
for(int i=0;i<rowCount;i++)
{
for(int j=0;j<columnCount;j++)
{
object value = dt.Rows[i][j];
if(value != null)
{
string cmdText =string.Fomrmat(cmdTexts[dt.Columns[j].Name],value);
string code = GetCode(cmdText);
}
}
}