【问题标题】:Compare Dataset column values to string array values C#将数据集列值与字符串数组值进行比较 C#
【发布时间】:2012-07-26 22:03:23
【问题描述】:

我正在尝试创建一个程序来扫描我们的公司分发点,并将使用我从 SCCM 导出的包数据。
我目前有一个作为数据源连接到 Visual Studio 的 SQL 数据集,还有一个通过目录运行并填充列表视图的字符串数组。

数据集包含 3 个表,我要使用的表称为 PackageDB_Query:

此表中的列是:

  • 包名
  • 制造商
  • 说明
  • 版本
  • 语言
  • PackageID(这是服务器上文件夹的名称(例如 FMC00015A)

我会将目录名称与数据集中的 PackageID 进行比较,然后返回 Package 名称。

这是我用文件夹名称填充列表视图的函数:

`public void FolderScan()
    {
        try
        {
            string[] dirs = Directory.GetDirectories("\\" + _serverName + "\\" + _commonShareName, "FMC*");
            folderCntBox.Text = dirs.Length.ToString();
            foreach (string dir in dirs)
            {
                listBox1.Items.Add(dir);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(Resources.MainForm_FolderScan_The_process_failed___0_, ex);
        }
    }`

我已根据以下建议对代码进行了编辑,但仍然无法正常工作! 这是我的功能:

'private void FolderScanTest()
    {
        try
        {
            var ds = new PackageDBDataSet();
            var dt = ds.Tables["PackageDB_Query"];

            string[] dirs = Directory.GetDirectories(@"\\PLYMMIMS001\SMSPKGD$", "FMC*");
            folderCntBox.Text = dirs.Length.ToString(CultureInfo.InvariantCulture);
            foreach (string dir in dirs)
            {
                DataRow dr = dt.Rows.Cast<DataRow>().Single(row => row["PackageID"] == dir);
                var packageName = dr["PackageName"] as string;
                listBox1.Items.Add(packageName);
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(Resources.MainForm_FolderScan_The_process_failed___0_ + ":" + ex, "Error");
        }
    }'

它说这个序列不包含匹配的元素!

【问题讨论】:

  • 一个数据集是一个表容器;如果数据集中只有一个表,那么Datatable dt =myDataSet.tables[0]; 将返回您期望的表
  • 我不确定这是否可行...数据集包含三个不同的表: DistributionPoints PackageDB PackageDB_Query(这是我需要参考的表)谢谢您的回复!
  • 您的 SQL 数据集是否返回带有表名的数据?如果是,则很容易根据 PackageID 从该特定表中获取 PackageName。如果不是,则意味着您不知道包信息在哪个表中(显然在 DataSet 中的哪个索引上)。在这种情况下,您必须检查 DataSet 中的每个表并找出包名称。让我知道这是否有意义。到时候我会提供代码。
  • 您收到的错误意味着 DataTable 中没有您要查找的 PackageID 的行。您的代码以ds = new PackageDBDataSet() 开头,它会生成一个空数据集。您认为您有从数据库加载填充数据集的代码?

标签: c# dataset


【解决方案1】:

应该是这样的:

using System.Linq;
...

DataSet ds = GetDataSet();
DataTable dt = ds.Tables["PackageDB_Query"];
DataRow dr = dt.Rows.Cast<DataRow>().Single(row => row["PackageID"] == dir);

string packageName = dr["PackageName"];

【讨论】:

  • 感谢所有的帮助......有时我想这些东西!
  • 我已根据您的建议对代码进行了编辑,但仍然无法正常工作!这是我的功能:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
相关资源
最近更新 更多