简体   繁体   English

Sqlite 查询不返回 C# 中的数据

[英]Sqlite query not returning data in C#

I am using Sqlite with C#.我在 C# 中使用 Sqlite。 When i run the query in Sqlite browser it returns the correct data but when i run the same query from C# code it does not return data.当我在 Sqlite 浏览器中运行查询时,它返回正确的数据,但是当我从 C# 代码运行相同的查询时,它不返回数据。 My C# code is:我的 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>();
}

When i run this query in C#, query does return a list of "EdgeData" but all the values are set to there default and not the exact data from database.当我在 C# 中运行此查询时,查询确实返回“EdgeData”列表,但所有值都设置为默认值,而不是数据库中的确切数据。 I am using sqlite-net.我正在使用 sqlite-net。

EdgeData is a custom class: 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; }
}
    //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;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM