2012-04-12 46 views
0

Im在SSIS包內部工作。我有一些C#腳本用於將表名放入對象變量(訪問表)中。該代碼連接到Access數據庫並循環查找將其名稱變爲變量的表。C#將'['']'添加到TableName的變量中使用

分配去如下:

using System; 
using System.Collections; 
using System.Data; 
using System.Data.OleDb; 
using Microsoft.SqlServer.Dts.Runtime; 
using System.Windows.Forms; 

namespace ST_9b2714c55db14556be74ca92f345c4e3.csproj 
{ 
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")] 
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 
    { 

     #region VSTA generated code 
     enum ScriptResults 
     { 
      Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, 
      Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure 
     }; 
     #endregion 

     public void Main() 
     { 
      Variables varCollection = null; 
      DataTable schemaTables = null; 
      ArrayList tableNames = new ArrayList(); 

      Dts.VariableDispenser.LockForWrite("User::AccessTables"); 
      Dts.VariableDispenser.GetVariables(ref varCollection); 

      using (OleDbConnection connection = new OleDbConnection(Dts.Connections["TE030698.Bases"].ConnectionString.ToString())) 
      { 
       string[] restrictions = new string[4]; 
       restrictions[3] = "Table"; 
       connection.Open(); 
       schemaTables = connection.GetSchema("Tables", restrictions); 
      } 

      foreach (DataRow row in schemaTables.Rows) 
      { 
       foreach (DataColumn column in schemaTables.Columns) 
       { 
        if (column.ColumnName.ToUpper() == "TABLE_NAME") 
        { 
         tableNames.Add(row[column].ToString()); 
        } 
       } 
      } 

      varCollection["User::AccessTables"].Value = tableNames; 

      Dts.TaskResult = (int)ScriptResults.Success; 

問題是一些表開始與數字或包含空格。所以我需要把名字保存在[]中。 2012年是一張桌子,但我需要它[2012]。我怎麼能改變C#代碼來做到這一點?

我對C#很新,所以任何建議將不勝感激。由於

+2

http://mattgemmell.com/2008/12/08/what-have-you-tried/ – 2012-04-12 16:30:11

+4

埃姆,你寫 「[」 +姓名+ 「]」?我不確定問題是什麼。我能看到的唯一問題是命名空間。 – 2012-04-12 16:31:37

+0

什麼是2012?我沒有看到它在上面的代碼? – MoonKnight 2012-04-12 16:32:06

回答

3

您可以更改

tableNames.Add(row[column].ToString()); 

tableNames.Add(string.Format("[{0}]", row[column].ToString())); 

更多信息string.Format
http://msdn.microsoft.com/en-us/library/system.string.format.aspx

另一種方法是簡單地串聯:

tableNames.Add("[" + row[column].ToString() + "]"); 

但是,如果您的格式變得非常複雜,則不建議連接。

+0

非常感謝,不知道string.format的用法。 – 2012-04-12 16:43:23

+0

@Jay,IMO,在這種情況下,與String.Format – Habib 2012-04-12 16:54:06

+0

@ Habib.OSU Hm相比,優選級聯。因爲在做'Format'時你可以從行[column]中省略'.ToString()',所以我更喜歡'Format'。 – 2012-04-13 09:04:41

1

如果表名是"2010"你只是把它包在方括號,所以"[" + "2012" + "]"

,如果你在一個變量有「2012」,你可以不喜歡

string strTableName = "2012"; 
strTableName = String.Format("[{0}]", strTableName); 

我希望這有助於。