【问题标题】:Appending To List<string>追加到列表<string>
【发布时间】:2017-01-18 23:24:03
【问题描述】:

使用C# 如何附加到List&lt;string&gt;?我想运行两个单独的 SQL 查询并将两者的结果存储在我的List&lt;string&gt; 中。第一个查询返回

比尔和乔

第二个查询返回

詹姆斯和查尔斯

但我的Console.WriteLine() 只产生BillJoe

为了发生这种情况,我在语法中进行了哪些错误设置?

public static List<string> tempList = new List<string>();

static void Main(string[] args)
{   
  string qs = "Select Top 2 firstname from thistable";
  //
  GetFirstSetOfData(qs);

  string bc = "Select Top 2 firstname from thattable";
  //
  GetFirstSetOfData(bc);

  foreach (string tumble in tempList)
    Console.WriteLine(tumble);
}

private static void GetFirstSetOfData(string query)
{
  connection = new SqlConnection(ConnectionString);
  {
    cmd = new SqlCommand(queryString, connection);
    connection.Open();
    reader = cmd.ExecuteReader();
    while (reader.Read())
        tempList.Add(reader.GetValue(0).ToString());
    reader.Close();
  }
}

【问题讨论】:

  • 这不会编译,因为GetFirstSetOfData 无法访问 tempList。在您的实际代码中,tempList 是如何定义的?
  • 对不起,这是一个类变量。让我尽快解决这个问题。
  • 谢谢。正如代码所示,这应该可以工作。 tempList 仅被实例化一次,因为它是一个引用类型,所以对 GetFirstSetOfData 的两个调用都附加到同一个列表实例。这是假设 thattable 实际上返回您认为的结果。您可以尝试while (reader.Read()) { var x = reader.GetValue(0).ToString(); Console.WriteLine(x); tempList.Add(x); } 来验证查询是否返回了您期望的结果。
  • 您还应该尝试隔离该方法。让GetFirstSetOfData 返回一个列表到 main 方法并在那里添加
  • 所有好的建议,但如果第二个表有两行,您的代码应该可以工作。您如何检查该方法是否有效读取 JamesCharles

标签: c# arrays sqldatareader


【解决方案1】:

我的猜测是它可能与 SQLConnection 有关。最好在 Main 方法中初始化 SQLConnection,而不是再次尝试连接到同一个数据库。此外,一旦你完成,SQLConnection 真的应该被处理掉。确保发生这种情况的简单方法是将内容包装在 using 语句中,如下所示:

using (connection = new SQLConnection(connectionString))
{
    connection.Open();
    //do all your queries and things
}

您可以在此处的 MSDN 上看到一个出色的完整示例:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close(v=vs.110).aspx

试试看它是否有效。我认为问题在于您正在同一连接上尝试 connection.open 两次。不过可能是错的,自从我在 C# 中弄乱 sql 以来已经有一段时间了。

【讨论】:

  • 如果连接出现问题,他应该会在 Open 调用中看到异常。关于 using 语句的好建议,但这不是发布的代码的问题。
  • 好的,不记得那个是否会抛出错误。但是,某些环境,尤其是 Web 服务器,往往会默默地抑制错误。因此,如果他通过 Visual Studio 运行它,他已经知道这是否是 open 语句的问题,否则他应该做一些事情来确认他的代码正在通过第二次调用。
猜你喜欢
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2018-07-14
  • 2021-01-09
  • 2013-11-08
  • 2020-08-08
  • 2012-02-01
相关资源
最近更新 更多