Как в результате запроса к базе получить строку с разделителем?

124
03 января 2021, 17:50

Имею базу 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 уникален в базе. Хочу получить в строке значения всех столбцов через запятую или другой разделитель.

Answer 1

Можно получить значения всех столбцов через GetValues и соединить их через String.Join:

...
while (r.Read())
{
    object[] values = new object[r.FieldCount];
    r.GetValues(values);
    return String.Join(",", values);
}
...

Все значения будут считаны как object и преобразованы в строку через ToString() по-умолчанию. Если потребуется выводить в каком-то особенном строковом представлении, то придется выбирать значения циклом по одному через GetValue.

Советую добавить проверку на то, что запрос вернул ровно одну строку, во избежание недоразумений.

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

READ ALSO
C# Обмен данными между формами

C# Обмен данными между формами

Помогите разобратьсяПишу программу на С# в которой от Form1 наследуется Form2 и Form3

99
Ошибка компиляции 'List<Customer>' does not contain a definition for 'Orders'

Ошибка компиляции 'List<Customer>' does not contain a definition for 'Orders'

Выдаёт такую ошибку, что делать

106
Для чего нужны делегаты в C#?

Для чего нужны делегаты в C#?

Разбираюсь в c# в частности с делегатами, возник вопрос зачем нужны делегаты если можно создать экземпляр класса и вызвать метод

130