Файлы ресурсов обычно используются для локализации. Но строка - это просто строка, это просто строка, и вы действительно хотите отправить любую старую строку в файле ресурсов в вашу базу данных?
Я полностью согласен с другими, что вы должны использовать linq или типизированные наборы данных и т. Д. Лично мне приходилось только несколько лет прибегать к текстовым запросам, и когда я это делаю, это обычно что-то вроде следующего:
Вы настроили небольшую платформу, а затем все, что вам нужно сделать, это сохранить файл XML. Отдельный конкретный XML-файл намного проще в управлении и развертывании, чем ресурсная DLL. У вас также есть хорошо известное место (хранилище), в котором хранятся Sql Queries и некоторые метаданные о них, а не просто соглашение об именах.
Никогда не недооценивайте полезность (простого) класса над строковым литералом. Начав использовать класс, вы можете добавлять вещи, которые вы не можете (легко) сделать с помощью простой строки.
Компилятор блокнота, поэтому извиняюсь, если это не 100%. Это всего лишь набросок того, как все взаимодействует.
public static class SqlResource
{
private static Dictionary<string,SqlQuery> dictionary;
public static void Initialize(string file)
{
List<SqlQuery> list;
// deserialize the xml file
using (StreamReader streamReader = new StreamReader(file))
{
XmlSerializer deserializer = new XmlSerializer(typeof(List<SqlQuery>));
list = (List<SqlQuery>)deserializer.Deserialize(streamReader);
}
dictionary = new Dictionary<string,SqlQuery>();
foreach(var item in list )
{
dictionary.Add(item.Name,item);
}
}
public static SqlQuery GetQueryByName(string name)
{
SqlQuery query = dictionary[name];
if( query == null )
throw new ArgumentException("The query '" + name + "' is not valid.");
if( query.IsObsolete )
{
// TODO - log this.
}
return query;
}
}
public sealed class SqlQuery
{
[XmlAttributeAttribute("name")]
public bool Name { get; set; }
[XmlElement("Sql")]
public bool Sql { get; set; }
[XmlAttributeAttribute("obsolete")]
public bool IsObsolete { get; set; }
[XmlIgnore]
public TimeSpan Timeout { get; set;}
/// <summary>
/// Serialization only - XmlSerializer can't serialize normally
/// </summary>
[XmlAttribute("timeout")]
public string Timeout_String
{
get { return Timeout.ToString(); }
set { Timeout = TimeSpan.Parse(value); }
}
}
Ваш XML-файл может выглядеть как
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfSqlQuery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SqlQuery name="EmployeeByEmployeeID" timeout="00:00:30" >
<Sql>
SELECT * From Employee WHERE EmployeeID = @T0
</Sql>
</SqlQuery>
<SqlQuery name="EmployeesForManager" timeout="00:05:00" obsolete="true" >
<Sql>
SELECT * From Employee WHERE ManagerID = @T0
</Sql>
</SqlQuery>
</ArrayOfSqlQuery>