Я пытаюсь прочитать некоторые файлы .sql, которые я встроил в файл resx с именем SQLUpdateScripts.Все мои файлы в SQLupdateScripts.resx имеют формат 00001.sql, 00002.sql, 0003.sql и т. Д. Я хочу прочитать содержимое каждого файла sql и выполнить его на основе двух переменных
for (int i = DbVersion+1; i <= FileDbVersion; i++)
{
string updateScripts = "script_" + i.ToString("D5");
....
var sqlqueries = myString.Split(new[] { "\nGO", "\ngo" }, StringSplitOptions.RemoveEmptyEntries);
etc....
Iперепробовал много предложений в stackoverflow, но все они возвращают нуль или исключение
ResourceManager sqLUpdateScripts = new ResourceManager(typeof(SQLUpdateScripts));
string myString = sqLUpdateScripts.GetString(updateScripts);
также
object[] args = new object[] { updateScripts };
SQLUpdateScripts obj = new SQLUpdateScripts();
obj.GetType().InvokeMember(updateScripts,
BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
Type.DefaultBinder, obj, args);
Код в SqlUpdateScripts.Designer.cs для каждого файла sql
internal static string script_00001
{
get {
return ResourceManager.GetString("script_00001", resourceCulture);
}
}
internal static string script_00002
{
get {
return ResourceManager.GetString("script_00002", resourceCulture);
}
}
Я прочитал, что должен использовать отражение, чтобы вызывать каждый файл как метод, используя invokeMember, дает мне исключение, которое не может найти класс SqlUpdateScripts.script_0001 '.Когда я попытался использовать ResourceManager, он просто возвращает myString как ноль.
Если я вызвал вручную:
var sqlqueries = SQLUpdateScript.script_0001.Split(new[] { "\nGO", "\ngo" }, StringSplitOptions.RemoveEmptyEntries);
, он работает нормально, но я хочу использовать переменные для имени файла, а не стандартИмя файла