使用未分配的局部变量'xxx'

时间:2010-05-19 13:12:05

标签: c# database visual-studio-2005 variables oledb

我正在从我们的竞争对手写一个数据库导入器到我们的数据库:) 我有一个代码生成器,它创建方法表单导入到我们的数据库,如

public void Test_Import_Customer_1()

 // variables
 string conn;
 string sqlSelect;
 string sqlInsert;

 int extID;
 string name;
 string name2;
 DateTime date_inserted;

 sqlSelect="select id,name,date_inserted from table_competitors_1";
 oledbreader reader = new GetOledbRader(sqlString,conn);
 while (reader.read())
 {
  name=left((string)myreader["name"],50); //limitation of my field
  date_inserted=myreader["date_inserted"];
  sqlInsert=string.Format("insert into table(name,name2,date_inserted)values '{0}', '{1}', {2})",name,name2,date_inserted); //here is the problem name2 "Use of unassigned local variable"
  ExecuteSQL(sqlInsert)
 }

由于不同的公司数据库有不同的字段,我无法为每个变量设置值,并且有大量的表可以将一个变量用于下一个变量。

喜欢

sqlSelect_Company_1 = "select name,date_inserted from table_1";
sqlSelect_Company_2 = "select name,name2 from table_2";

有没有办法用默认值逐个覆盖每个变量的输入?

2 个答案:

答案 0 :(得分:0)

不,这是不可能的。您必须为每个变量分配一个默认值。您不能使用尚未初始化的变量 - 它们可能包含随机值,您当然不希望在数据库中插入随机值!

您实际想要做的是:为每个使用您需要的值的数据库编写单独的方法。没有其他办法,技术上是不可能的。

如果你有大量的目标数据库,有很多方法可以解决这个问题,但如果你不熟悉足够的背景,我不能推荐这个。 (我从你的问题判断你是C#和数据库的新手?如果我错了,请抱歉。)

只需为每个数据库编写一个新方法。

答案 1 :(得分:0)

不是将参数值存储在变量中,而是将它们存储在Dictionary对象中,其中键作为字段名称,值/ params作为值。

创建一个泛型方法,该方法接受表名的字符串和参数的字典。您可以使用字符串构建器来构建sql字符串。