首页新闻找找看学习计划

动态传递参数问题?

0
悬赏园豆:100 [已解决问题] 解决于 2013-12-19 17:37

需求简单理解:处理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,有的说是用数组参数。有例子吗?或者有更好的其他方法来解决这个需求?

smallbird2012的主页 smallbird2012 | 初学一级 | 园豆:120
提问于:2013-08-21 14:44
< >
分享
最佳答案
0

能否举个三个字段的实际的例子,即你生成的 sql 是什么样的。

收获园豆:100
Launcher | 高人七级 |园豆:45040 | 2013-08-21 14:52

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 | 园豆:120 (初学一级) | 2013-08-21 14:53

@smallbird2012: 然后你想要的方法的签名给写出来下,指明输入和输出。

Launcher | 园豆:45040 (高人七级) | 2013-08-21 15:03

这个是三个固定desc形式的目前处理方式。@Launcher: 

smallbird2012 | 园豆:120 (初学一级) | 2013-08-21 15:15

@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 | 园豆:45040 (高人七级) | 2013-08-21 15:33

@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 | 园豆:120 (初学一级) | 2013-08-21 15:43

@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);

     }

 }
}

Launcher | 园豆:45040 (高人七级) | 2013-08-21 16:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册