Извлечение нескольких строк данных из таблицы в Firebird SQL с использованием C # .NET - PullRequest
0 голосов
/ 29 июня 2018

Я не могу найти ничего конкретного в документации Firebird.NET, но мне нужно извлечь несколько отдельных строк данных из таблицы из моей базы данных Firebird. Позже я хочу разместить формуляры для сервера и веб-сайта, где вы можете перечислить всех сотрудников с определенными полями данных, которые я хочу выбрать вручную.

Запрос sql будет:

SELECT employee_id, name, first_name, active_or_not
FROM t_personal

Я уже могу сделать запрос с единственной возвращаемой строкой внутри серверного класса, используя Dapper следующим образом:

using System;
using System.Linq;
using FirebirdSql.Data.FirebirdClient;
using Dapper;
using System.Data;
//the references i use


       public string SingleQuery(string commando)
    {
        try
        {
            String query = _festeVerbindung.Query<String>(commando).Single();

            return query;
        }
        catch (Exception oof)
        {
            return oof.Message;
        }
    }

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

1 Ответ

0 голосов
/ 29 июня 2018

Не думаю, что ваш запрос будет работать так, как вы ожидаете. Вы возвращаете одну строку типа string, но ваш запрос SQL возвращает несколько полей. Если вы действительно хотите вернуть строку, то в операторе SQL вы можете объединить поля. Но это усложнит работу с отдельными полями в коде C #. Я хотел бы предложить что-то вроде ниже. Я иллюстрирую 3 способа сделать это. 1) без предложения where в SQL, затем с предложением where и последним преобразованием результатов в массив или строки. Последний фрагмент, который я бы не рекомендовал, он неряшливый, но он показывает, как вы можете преобразовать возвращаемый набор в массив строк. Если вам действительно нужно вернуть массив строк, я бы предложил использовать тестовый сериализатор CSV или JSON. Эти вызовы пакетов обрабатывают аномалии, которые вы обнаружите при работе со строками (например, NULL или встроенные запятые и т. Д.).

-HTH

   public class EmployeeRec
    {
        public int Employee_Id { get; set; }
        public string Name { get; set; }
        public string First_name { get; set; }
        public string active_or_not { get; set; }
    }
    public class QueryClass
    {

        public EmployeeRec[] ExecuteQueryNoWhereClause()
        {

            var sql = @"SELECT employee_id, name, first_name, active_or_not FROM t_personal";

            try
            {
                using (IDbConnection _festeVerbindung = Data.Connection.GetConnection("My Connectionstring"))
                {

                    var results = _festeVerbindung.Query<EmployeeRec>(sql).ToArray();

                    var activeOnly = results.Where(x => x.active_or_not == "Y");

                    return results;

                }

            }
            catch (Exception oof)
            {
                throw;
            }
        }

        public EmployeeRec[] ExecuteQueryWithWhereClause(string activeFlag)
        {


            var sql = @"SELECT employee_id, name, first_name, active_or_not FROM t_personal WHere active_or_not = @ACTIVE_FLAG";

            try
            {
                using (IDbConnection _festeVerbindung = Data.Connection.GetConnection("My Connectionstring"))
                {

                    var results = _festeVerbindung.Query<EmployeeRec>(sql, new { ACTIVE_FLAG = activeFlag }).ToArray();

                    foreach (var item in results)
                    {

                    }
                    return results;


                }

            }
            catch (Exception oof)
            {
                throw;
            }
        }

        public string[] ExecuteQueryReturnStringArray(string activeFlag)
        {
            StringBuilder sb = new StringBuilder();
            List<string> retArray = new List<string>();

            var sql = @"SELECT employee_id, name, first_name, active_or_not FROM t_personal WHere active_or_not = @ACTIVE_FLAG";

            try
            {
                using (IDbConnection _festeVerbindung = Data.Connection.GetConnection("My Connectionstring"))
                {

                    var results = _festeVerbindung.Query<EmployeeRec>(sql, new { ACTIVE_FLAG = activeFlag }).ToArray();


                    /*
                     * 
                     * There are better ways to do this, if you need to return a string array you should a Json or CSV text serializer like Servicestack.Text * 
                     * 
                     */
                    retArray.Add("employee_id, name, first_name, active_or_not");

                    foreach (var item in results)
                    {
                        retArray.Add(item.Employee_Id.ToString() + "," + item.Name + "," + item.First_name + "," + item.active_or_not);
                    }
                    return retArray.ToArray();


                }

            }
            catch (Exception oof)
            {
                throw;
            }
        }

    }
...