Запрос Sqlite не возвращает данные в C # - PullRequest
1 голос
/ 30 апреля 2019

Я использую Sqlite с C #.Когда я запускаю запрос в браузере Sqlite, он возвращает правильные данные, но когда я выполняю тот же запрос из кода C #, он не возвращает данные.Мой код C #:

foreach (var group in groups)
{
        var edgeDataWithGroupCmd = EdgeDatabase._connection.CreateCommand(@"SELECT ad.Id, ad.Name, adType.Id, adType.Name, h.Data, chart.URL
                                                                                    from
                                                                                    tblAdapter ad JOIN
                                                                                    tblAdapterType adType ON ad.AdapterTypeId = adType.Id JOIN 
                                                                                    tblHealth h ON ad.HealthId = h.Id JOIN 
                                                                                    tblCharts chart ON ad.ChartId = chart.Id 
                                                                                    WHERE ad.GroupId = " + group.Id);



        List<EdgeData> edgeDatas = edgeDataWithGroupCmd.ExecuteQuery<EdgeData>();
}

Когда я запускаю этот запрос в C #, запрос возвращает список «EdgeData», но все значения по умолчанию установлены там, а не точные данные из базы данных.Я использую sqlite-net.

EdgeData - это пользовательский класс:

public class EdgeData
{
    public int AdapterId { get; set; }
    public string AdapterName { get; set; }
    public int AdapterTypeId { get; set; }
    public string AdapterTypeName { get; set; }
    public bool IsConnected { get; set; }
    public int MaxRefreshRate { get; set; }
    public int AchievedRefreshRate { get; set; }
    public string ChartLink { get; set; }
}

1 Ответ

0 голосов
/ 30 апреля 2019
    //get one instance, and use function in logic/business layer to create list
    //or rebuild function to return a list<EdgeData>
    public EdgeData GetEdgeData(int groupID)
    {
        connection.open();

        EdgeData edgeData;
        StringBuilder sb = new StringBuilder();

        sb.Append("SELECT ad.Id, ad.Name, adType.Id, adType.Name, h.Data, chart.URL
                    from
                    tblAdapter ad JOIN
                    tblAdapterType adType ON ad.AdapterTypeId = adType.Id JOIN 
                    tblHealth h ON ad.HealthId = h.Id JOIN 
                    tblCharts chart ON ad.ChartId = chart.Id 
                    WHERE ad.GroupId = @GroupId");


        SqlDataReader data;
        String sql = sb.ToString();
        //Use sql injection instead of "+"
        using (SqlCommand cmd = new SqlCommand(sql, connection))
        {
            cmd.Parameters.AddWithValue("@GroupId", groupID);
            data = cmd.ExecuteReader();
        }

        while (data.Read())
        {
             int AdapterId = (int)data["ad.Id"]
             string AdapterName = (string)data["ad.Name"]
             int AdapterTypeId = ...
             string AdapterTypeName = ...
             bool IsConnected = ...
             int MaxRefreshRate = ...
             int AchievedRefreshRate = ..
             string ChartLink = ..


             edgeData = new EdgeData(AdapterId, AdapterName, etc...);
        }

        connection.Close();
        return edgeData;
    }
...