Имею базу sqlite , к ней в методе делаю запрос, и не могу сообразить как мне правильно вернуть строку с разделителем.
public string GetImportedFileList(string connstring, string idrecord,string tablename,string Idname)
{
string ImportedFiles = null;
using (SQLiteConnection connect = new SQLiteConnection(connstring))
{
connect.Open();
using (SQLiteCommand fmd = connect.CreateCommand())
{
var sb= new StringBuilder();
var que = sb.Append("SELECT * FROM "+tablename+" where "+Idname+"="+idrecord);
fmd.CommandText = que.ToString();
fmd.CommandType = CommandType.Text;
SQLiteDataReader r = fmd.ExecuteReader();
while (r.Read())
{
object[] values = new object[] { };
r.GetValues(values);
ImportedFiles= String.Join(",", values).ToString();
}
}
}
return ImportedFiles;
}
На вход метода подаю строку подключения, имя таблицы, имя нужного мне поля, и значение этого поля. И на выходе хочется увидеть результат запроса в виде строки с разделителем.
Строка всегда будет одна, так как id уникален в базе. Хочу получить в строке значения всех столбцов через запятую или другой разделитель.
Можно получить значения всех столбцов через GetValues и соединить их через String.Join:
...
while (r.Read())
{
object[] values = new object[r.FieldCount];
r.GetValues(values);
return String.Join(",", values);
}
...
Все значения будут считаны как object и преобразованы в строку через ToString() по-умолчанию. Если потребуется выводить в каком-то особенном строковом представлении, то придется выбирать значения циклом по одному через GetValue.
Советую добавить проверку на то, что запрос вернул ровно одну строку, во избежание недоразумений.
Еще, обычно при составлении запросов через конкатенацию строк советуют изучить работу с параметризованными запросами, чтобы избежать SQL-инъекции. Но в данном случае запрос имеет динамическую структуру и параметризовать получится только разве что idrecord. В любом случае подумайте о безопасности если какой-то аргументов метода приходит извне.
Продвижение своими сайтами как стратегия роста и независимости