C# Sqlite查询在C中不返回数据
我将Sqlite与C一起使用。当我在Sqlite浏览器中运行查询时,它会返回正确的数据,但当我从C代码中运行相同的查询时,它不会返回数据。我的C代码是:C# Sqlite查询在C中不返回数据,c#,sqlite-net,C#,Sqlite Net,我将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
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>();
}
您需要显示EdgeData的定义,并查询,这是Dapper提供的吗?此外,这里不需要命令,您只需将SQL作为字符串传递给该查询方法,而不使用命令对象,因此只需执行字符串SQL=@SELECT。。。;代码已经更新了一点,请您现在检查一下。还提供了EdgeData定义@LasseVågsætherkarlsensis。EdgeData类型中的属性名称和查询返回的字段名称不匹配,Dapper或您正在使用的提供查询的任何库都无法在两者之间正确映射。请尝试选择ad.Id作为AdapterId,…,或添加属性或其他可以告诉库如何正确映射的内容。具体地说,查询返回的字段是Id,而属性名称是AdapterId,或者这两个字段必须匹配,或者您需要告诉映射实现如何在这两个字段之间映射。它起到了作用:谢谢兄弟,你让我开心:@LasseVågsætherkarlse你需要展示EdgeData的定义,然后询问,这是Dapper的吗?此外,这里不需要命令,您只需将SQL作为字符串传递给该查询方法,而不使用命令对象,因此只需执行字符串SQL=@SELECT。。。;代码已经更新了一点,请您现在检查一下。还提供了EdgeData定义@LasseVågsætherkarlsensis。EdgeData类型中的属性名称和查询返回的字段名称不匹配,Dapper或您正在使用的提供查询的任何库都无法在两者之间正确映射。请尝试选择ad.Id作为AdapterId,…,或添加属性或其他可以告诉库如何正确映射的内容。具体地说,查询返回的字段是Id,而属性名称是AdapterId,或者这两个字段必须匹配,或者您需要告诉映射实现如何在这两个字段之间映射。它起到了作用:谢谢兄弟,你成就了我的一天:@LasseVågsætherKarlsenI正在使用Sqlite net@Jesse Van Evert。你的代码在那里不起作用。我正在使用Sqlite net@Jesse Van Evert。你的代码在那里不起作用。
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;
}