2012-04-12 4 views
0

Ich arbeite in einem SSIS-Paket. Ich habe ein C# -Skript zum Platzieren von Tabellennamen in eine Objektvariable (Zugriffstabellen). Der Code stellt eine Verbindung zu einer Access DB her und führt Schleifen für Tabellen durch, die ihre Namen in die Variable aufnehmen.C# Hinzufügen von '[' ']' zu Variable für TableName Verwendung

die Zuordnung geht wie folgt:

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; 

Problem ist einige Tabellen mit Zahlen beginnen oder Leerzeichen enthalten. Also brauche ich die Namen in []. 2012 ist ein Tisch, aber ich brauche es [2012]. Wie kann ich den C# -Code ändern, um das zu tun?

Ich bin ziemlich neu in C#, so dass jeder Rat sehr geschätzt werden würde. Dank

+2

http://mattgememm.com/2008/12/08/what-have-you-tried/ –

+4

Ehm, Sie schreiben "[" + name + "]"? Ich bin mir nicht sicher, was das Problem ist. Das einzige Problem, das ich sehen kann, ist mit dem Namensraum. –

+0

Was ist 2012? Ich sehe es im obigen Code nicht? – MoonKnight

Antwort

3

können Sie

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

zu

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

Mehr Informationen über string.Format:
http://msdn.microsoft.com/en-us/library/system.string.format.aspx

Die Alternative ist, einfach verketten:

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

Eine Verkettung wird jedoch vermieden, wenn Ihre Formatierung jemals remote komplex wird.

+0

Vielen Dank, wusste nicht über diese Verwendung von string.format. –

+0

@Jay, IMO, in diesem Fall ist die Verkettung bevorzugt im Vergleich zu String.Format – Habib

+0

@ Habib.OSU Hm. Da Sie '.ToString()' aus Zeile [Spalte] auslassen können, wenn Sie ein 'Format' machen, würde ich das' Format' bevorzugen. –

1

Wenn der Tabellenname "2010" ist, wickeln Sie ihn einfach in eckige Klammern, also "[" + "2012" + "]".

, wenn Sie die ‚2012‘ in einer Variablen haben Sie so etwas wie

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

tun können, ich hoffe, das hilft.

Verwandte Themen