【发布时间】:2017-07-13 02:45:50
【问题描述】:
这是我在 C# 中的第一个项目。我在 Access VBA 方面有一点经验。我想将我的应用程序移至独立程序。我正在查询一个包含培训类型和日期的表。我想根据执行日期来比较一些类型的培训。三种训练类型分别是 RWT010、RWP000 和 RWT010BP。如果 RWT010BP 存在并且更新,它是我唯一需要的。否则我需要 RWT010 和 RWP000。我已经想出了如何将值加载到变量中,但我需要能够使用它们。我希望 dateTime 值的名称是同一行的 trainType。这样我就可以比较它们并输出正确的组合。
我的旧访问逻辑如下所示:
LABEL_DATE: IIf(IsNull([RWT010]),"RWT010BP: " & _
Format([RWT010BP],"Short Date"),IIf([RWT010BP]>[RWT010],"RWT010BP: " & _
Format([RWT010BP],"Short Date"),"RWT010: " & _
Format([RWT010],"Short Date") & " & " & "RWP000: " & _
Format([RWP000],"Short Date")))
这是我在 c# 中的进展:
Console.Write("Enter ID: ");
int idnum = Convert.ToInt32(Console.ReadLine());
string sql = "SELECT EXPID, TYPE, DATE_LATEST FROM TRAINING_TABLE where expid =" + idnum;
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
using (DbDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
int expid = reader.GetInt32(0);
string trainType = reader.GetString(1);
DateTime trainDate = reader.GetDateTime(2);
【问题讨论】:
-
你是说你想让你的C#变量名
trainDate根据trainType的值改变?如果可能的话,那将是一个糟糕的主意,但事实并非如此。还是我误会了你? -
我想我真的应该问一下比较不同培训类型的日期最有效的方法是什么。抱歉,我真的很陌生。
-
我不会担心效率。清晰度更为重要。我对这里发生的事情的第一个猜测是,在 Access 中,
RWT010等都是单行中的日期字段,但在 Oracle 中,您有多行,每行都有一个名称字段和一个日期字段。而name字段是一个字符串,可以是"RWT010"、"RWT010BP"或"RWP000",对吗?