SQLite查询未在C#中返回数据

时间:2019-04-30 10:01:49

标签: c# sqlite-net

我在C#中使用Sqlite。当我在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 :(得分:0)

    //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;
    }