Использование неназначенной локальной переменной 'xxx' - PullRequest
0 голосов
/ 19 мая 2010

Я пишу импортер базы данных от наших конкурентов в нашу базу данных :) У меня есть генератор кода, который создает методы импорта формы в нашу базу данных, как

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 голосов
/ 19 мая 2010

Вместо того, чтобы хранить значения параметров в переменных, сохраните их в объекте Dictionary с ключами в качестве имен полей и ваших значений / параметров в качестве значений.

Создайте универсальный метод, который принимает строку для имени таблицы и словарь для параметров.Вы можете создать свою строку SQL с помощью строителя строк.

0 голосов
/ 19 мая 2010

Нет, это невозможно. Вы должны назначить значение по умолчанию для каждой переменной. Вы не можете использовать переменные, которые не были инициализированы - они могут содержать случайные значения, и вы определенно не хотите вставлять случайные значения в вашу базу данных!

То, что вы действительно хотите сделать, это: написать отдельный метод для каждой из баз данных, который использует именно те значения, которые вам нужны. Другого пути нет, это технически невозможно.

Если у вас очень большое количество целевых баз данных, есть много способов обойти эту проблему, но я не могу рекомендовать это, если вы не знакомы с достаточным количеством знаний. (Судя по вашему вопросу, вы довольно плохо знакомы с C # и базами данных? Извините, если я ошибаюсь.)

Просто напишите новый метод для каждой из баз данных.

...