问题描述
An Object reference is required for the non-static field,method,or property Program.InsertLogData()
对于 await insertlogdata()
的 try 块
我是否应该删除 main 中的 static 一词并将其保留为公共异步任务?
在给出建议后更新代码:
命名空间 ElasticSearchConsoleApp { 课程计划 { 私有只读 IElasticclient _elasticclient;
public Program()
{
_elasticclient = new Elasticclient();
}
public static async Task Main(string[] args)
{
Console.Write("getting connection...");
try
{
await InsertLogData();
}
catch(Exception ex)
{
Console.Write("Error: " + ex.Message);
}
Console.ReadLine();
}
public async Task<int> InsertLogData()
{
sqlConnection connection = null;
sqlCommand command = null;
int numrows = 0;
try
{
var response = await _elasticclient.SearchAsync<Object>(s => s
.Size(3000)
.Index("customer-simulation-es-app-logs*")
.Query(q => +q
.Daterange(dr => dr
.Field("@timestamp")
.GreaterThanorEquals("2021-06-07T17:13:54.414-05:00")
.LessthanorEquals(DateTime.Now))));
connection = new sqlConnection("Data Source=.\\sqlExpress;Database=ElasticSearchService;Trusted_Connection=True;");
connection.open();
foreach (var item in response.Hits)
{
var id = item.Id;
var sourceItem = item.source;
var json = _elasticclient.RequestResponseSerializer.SerializetoString(sourceItem);
command = new sqlCommand("INSERT INTO EsLogs (ELKLogID,LogMessage,DateCreated) VALUES ('" + id + "','" + json + "',getdate())",connection);
numrows = command.ExecuteNonQuery();
}
connection.Close();
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
finally
{
command.dispose();
connection.dispose();
}
return numrows;
}
}
}
解决方法
你必须修复弹性客户端。
private static readonly IElasticClient _elasticClient = new ElasticClient();
// public Program()
// {
// }
在此之后,您将遇到另一个错误。你必须通过放置来修复你的 foreach 循环 循环内的 command.ExecuteNonQuery
connection.Open();
foreach (var item in response.Hits)
{
var id = item.Id;
var sourceItem = item.Source;
var json = _elasticClient.RequestResponseSerializer.SerializeToString(sourceItem);
command = new SqlCommand("INSERT INTO EsLogs (ELKLogID,LogMessage,DateCreated) VALUES ('" + id + "','" + json + "',getdate())",connection);
numrows = command.ExecuteNonQuery();
}
connection.Close();
顺便说一句,您必须考虑为查询使用参数