我希望能够使用创建点的日期和时间从数据库中获取一个点。我想通过询问用户他们想要的日期/时间来做到这一点,然后使用该日期/时间来找到该点。这是我目前的代码,它只是从我运行代码的确切时间得到的点数。我希望能够从例如6/4/2012 4:50:29获取数据。
//connect to pi server
PIServers piServers = new PIServers();
foreach (var server in piServers)
{
Console.WriteLine("Server: {0}", server.Name);
}
PIServer piServer = piServers.DefaultPIServer;
Console.WriteLine("Default Server: {0}", piServer.Name);
piServer.Connect();
//get a PI Point
var point = PIPoint.FindPIPoint(piServer, "Pipoint");
var value = point.Snapshot();
Console.WriteLine("Point {0} Value {1} {2}", point.Name,
value.Value.ToString(),value.Timestamp.ToString());
非常感谢您的帮助。
答案 0 :(得分:1)
您需要做的是先询问用户:
Console.WriteLine("Enter date");
var userInput = Console.ReadLine();
现在userInput
是一个字符串,因此您需要将其转换为DateTime
对象,我不会直接转换它,因为它很容易获得InvalidCastException
,所以我们应该使用内置的TryParse(String, out DateTime)
来验证它是否是正确的DateTime
。
DateTime result;
DateTime.TryParse(userInput, out result);
如果userInput
是正确的DateTime
,那么result
将是有效的DateTime
对象。如果不正确,result
将是DateTime.MinValue
,所以我会检查:
if(!result.Equals(DateTime.MinValue))
{
// Continue to look it up in the DB
}
答案 1 :(得分:0)
您必须从用户那里获得输入并将该值存储在变量中。
我假设var point = PIPoint.FindPIPoint(piServer, "Pipoint");
是查询数据库匹配的代码行。
在这种情况下,您可能希望将日期时间作为字符串传递。 string input = Console.Readline();
然后只需将userInput传递给FindPIPoint方法。
但是如果.FindPiPoint方法正在寻找日期时间,则需要先将其强制转换为日期时间对象。
由于这是假设任何可能的日期时间都可能匹配(我怀疑是这种情况),您应该为错误匹配添加一些错误处理。