【问题标题】:Please help me understand how to convert my code to work like this thread请帮助我了解如何将我的代码转换为像这个线程一样工作
【发布时间】:2012-05-02 11:03:00
【问题描述】:

我不确定是否需要创建一个全新的类或什么,我对 asp.net 很陌生。

这是我的代码:

public static IEnumerable<DistInfo> GetGeneralInformation ( int ClientID )
{
    using ( var conn = new SqlConnection( GetConnectionString() ) )
    using ( var cmd = conn.CreateCommand() )
    {
        conn.Open();
        cmd.CommandText =
        @"SELECT i.GoLiveDate, i.FirstBonusRun, i.TechFName, i.TechLName, i.TechEmail, i.TechPhone, i.WebISPFName, i.WebISPLName, 
          i.WebISPEmail, i.WebISPPhone, i.FullFillFName, i.FullFillLName, i.FullFillEmail, i.FullFillPhone, d.FName,
          d.LName, d.HomePhone, d.Email
          FROM NC_Information i
          INNER JOIN Distributor d
            ON d.DistID = i.ClientID
          WHERE clientID = @value";
        cmd.Parameters.AddWithValue( "@value", ClientID );
        using ( var reader = cmd.ExecuteReader() )
        {
            while ( reader.Read() )
            {
                var distInfo = new DistInfo
                {
                    AnticipatedLaunchDate = reader.GetDateTime( reader.GetOrdinal( "GoLiveDate" ) )
                };
                yield return distInfo;
            }
        }
    }
}

给出了您是否缺少组装或参考。这是否意味着我需要创建一个 DistInfo 类来完成这项工作?

new DistInfo 给出与上述相同的错误。

对不起,我对 asp.net 很陌生,不太了解如何让我的工作像这篇文章中那样:

I keep getting this error: "Invalid attempt to call Read when reader is closed"

【问题讨论】:

  • 你定义了DistInfo类吗?
  • 您不了解基本的编程原理并且正在尝试连接到数据库?真的吗?倒带并重新开始。 msdn.microsoft.com/en-us/library/aa288436(v=vs.71).aspx 来自 Hello World。
  • @walther 我已经将站点连接到数据库、处理会话、登录用户。连接到数据库甚至不是问题。从数据库中提取信息甚至不是问题。然而,在这个实例中,从数据库中提取这么多信息,然后尝试将其放入文本框中是问题所在。

标签: c# asp.net sql sql-server tsql


【解决方案1】:

你真的有一个叫DistInfo的类吗?代码是否编译?如果没有,您需要添加一个至少具有DateTime 的新 DistInfo 类。比如:

public class DistInfo
{
    public DateTime AnticipatedLaunchDate { get; set; }
}

如果需要,您可以在其中添加更多属性:)

【讨论】:

  • 好的,我现在有了这个。我现在如何进行这项工作? IEnumerable&lt;DistInfo&gt; distInfo = GeneralFunctions.GetGeneralInformation( ( int )Session[ "DistID" ] ); launchDate.Text = distInfo.AnticipatedLaunchDate; 它不喜欢 AnticipatedLaunchDate。
  • 您需要将第二部分更改为launchDate.Text = distInfo.AnticipatedLaunchDate.ToShortDateString();
  • distInfo 不喜欢 .AnticipatedLaunchDate。它给出以下错误:system.Collections.Generic.IEnumerable 不包含“AnticipatedLaunchDate”的定义,并且没有扩展方法“AnticipatedLaunchDate”接受类型的第一个参数......
  • 抱歉,你有一个项目列表,而不仅仅是一个,这就是 IEnumerable 的意思,一个 DistInfo 的列表。你到底想让launchDate控件说什么?
  • launchDate 控件应填充 GetGeneralInformation(int ClientID) 方法的结果。这将是 DateTime 或空。
【解决方案2】:

如果您只需要返回日期/时间信息,请像这样定义您的方法

public static IEnumerable<DateTime> GetGeneralInformation(int ClientID)

并像这样简化您的阅读循环

int goLiveDateOrdinal = reader.GetOrdinal("GoLiveDate");
while (reader.Read()) {
    yield return reader.GetDateTime(goLiveDateOrdinal);
}

只有在必须返回多个值时才需要创建一个类。

【讨论】:

  • datetime 只是一个属性,我最终会有 16 个左右。只是使用一个来让它工作。 =(我确实克服了错误,但是它与会话变量有关。现在进入下一个错误。:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多