将数据集列值与字符串数组值C#进行比较

时间:2012-07-25 23:45:42

标签: c# dataset

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

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

此表中的列是:

  • PACKAGENAME
  • 制造商
  • 描述
  • 语言
  • PackageID(这是服务器上文件夹的名称(例如FMC00015A)

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

这是我用来用文件夹名称填充listview的函数:

`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");
        }
    }'

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

1 个答案:

答案 0 :(得分: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"];