2012-07-25 117 views
1

我試圖創建一個程序來掃描我們的公司分發點,並使用我從SCCM導出的數據包數據。
我目前有一個SQL數據集連接到Visual Studio作爲數據源,也是一個字符串數組,通過目錄運行並填充列表視圖。將數據集列值與字符串數組值進行比較C#

數據集包含3個表和一個我想用被稱爲PackageDB_Query:

在這個表中的列有:

  • PACKAGENAME
  • 廠商
  • 說明
  • 版本
  • 語言
  • 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"); 
     } 
    }' 

它說該序列不包含匹配元素!

+0

數據集是一個表容器;如果數據集中只有一個表,那麼'Datatable dt = myDataSet.tables [0];'將返回您期望的表 – Boomer 2012-07-25 23:56:52

+0

我不確定這將工作...該數據集包含三個不同的表: DistributionPoints PackageDB PackageDB_Query(這是我需要參考的表格) 謝謝你的回覆! – Tonesto7 2012-07-26 00:50:13

+0

你的SQL數據集是否返回帶有表名的數據?如果是,則可以很容易地根據該特定表中的PackageID獲取PackageName。如果沒有,意味着你不知道Package信息在哪個表(顯然是DataSet中的Index)。在這種情況下,您必須檢查DataSet中的每個表並找出包名。讓我知道這是否合理。然後我會提供代碼。 – Umesh 2012-07-26 03:19:02

回答

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"]; 
+0

感謝您的幫助......有時我會想這件事! – Tonesto7 2012-07-26 12:51:43

+0

我根據您的建議對代碼進行了編輯,但它仍然無效! 這是我的功能: – Tonesto7 2012-07-26 13:58:28

相關問題