比较数据集列值和字符串数组值C#

比较数据集列值和字符串数组值C#,c#,dataset,C#,Dataset,我正在尝试创建一个程序来扫描我们的公司分发点,并将使用我从SCCM导出的包数据。 我目前有一个SQL数据集作为数据源连接到VisualStudio,还有一个字符串数组贯穿目录并填充列表视图 数据集包含3个表,我要使用的一个称为PackageDB_Query: 此表中的列为: 包装名称 制造商 描述 版本 语言 PackageID(这是服务器上文件夹的名称(例如FMC00015A) 我会将目录名与数据集中的PackageID进行比较,然后返回包名 下面是我用来用文件夹名称填充listview的

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

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

此表中的列为:

  • 包装名称
  • 制造商
  • 描述
  • 版本
  • 语言
  • 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");
        }
    }'
'private void FolderScanTest()
{
尝试
{
var ds=新的PackageDBDataSet();
var dt=ds.Tables[“PackageDB_Query”];
字符串[]dirs=Directory.GetDirectories(@“\\PLYMMIMS001\SMSPKGD$”,“FMC*”;
folderCntBox.Text=dirs.Length.ToString(CultureInfo.InvariantCulture);
foreach(dirs中的字符串dir)
{
DataRow dr=dt.Rows.Cast().Single(row=>row[“PackageID”]==dir);
var packageName=dr[“packageName”]作为字符串;
列表框1.Items.Add(packageName);
}
}
捕获(例外情况除外)
{
Show(Resources.MainForm_FolderScan_进程_失败___0_+”:“+ex,”错误”);
}
}'

它说序列中没有匹配的元素!

应该是这样的:

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"];
使用System.Linq;
...
数据集ds=GetDataSet();
DataTable dt=ds.Tables[“PackageDB_Query”];
DataRow dr=dt.Rows.Cast().Single(row=>row[“PackageID”]==dir);
字符串packageName=dr[“packageName”];

应该是这样的:

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"];
使用System.Linq;
...
数据集ds=GetDataSet();
DataTable dt=ds.Tables[“PackageDB_Query”];
DataRow dr=dt.Rows.Cast().Single(row=>row[“PackageID”]==dir);
字符串packageName=dr[“packageName”];

数据集是一个表容器;如果数据集中只有一个表,则
Datatable dt=myDataSet.tables[0];
将返回您期望的表我不确定该表是否有效……数据集包含三个不同的表:DistributionPoints PackageDB PackageDB\u Query(这是我需要引用的表)感谢您的回复!您的SQL数据集是否返回具有表名的数据?如果是,则可以根据特定表中的PackageID轻松获取PackageName。如果不是,则意味着您不知道在哪个表中(显然是在数据集中的哪个索引上)包信息是。在这种情况下,您必须检查DataSet中的每个表并找出包名称。如果这有意义,请告诉我。我将提供代码。您得到的错误意味着DataTable中没有包含您要查找的包ID的行。您的代码以
ds=new PackageDBDataSet()开头
生成空数据集。您认为您有代码从数据库加载填充的数据集?数据集是一个表容器;如果数据集中只有一个表,则
Datatable dt=myDataSet.tables[0];
将返回您期望的表我不确定该表是否有效…数据集包含三个不同的表:DistributionPoints PackageDB PackageDB_Query(这是我需要引用的表)感谢您的回复!您的SQL数据集是否返回具有表名的数据?如果是,则可以根据特定表中的PackageID轻松获取PackageName。如果不是,则意味着您不知道在哪个表中(显然是在数据集中的哪个索引上)包信息是。在这种情况下,您必须检查DataSet中的每个表并找出包名称。如果这有意义,请告诉我。我将提供代码。您得到的错误意味着DataTable中没有包含您要查找的包ID的行。您的代码以
ds=new PackageDBDataSet()开头
这会生成一个空数据集。你认为你有代码可以从数据库中加载填充的数据集吗?感谢所有的帮助…有时我会想得太多!我根据你的建议对代码进行了编辑,但仍然不起作用!这是我的函数:感谢所有的帮助…有时我会想得太多!哈哈我已经根据您的建议对代码进行了编辑,但仍然不起作用!以下是我的功能: