0

我在 SSIS 包中工作。我有一些用于将表名放入对象变量(访问表)的 C# 脚本。该代码连接到 Access DB 并循环获取将其名称放入变量中的表。

分配如下:

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# 很陌生,所以任何建议都将不胜感激。谢谢

4

2 回答 2

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

但是,如果您的格式变得非常复杂,则不鼓励连接。

于 2012-04-12T16:32:51.390 回答
1

如果表名是"2010"您只需将其括在方括号中,那么"[" + "2012" + "]".

如果变量中有“2012”,则可以执行类似的操作

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

我希望这有帮助。

于 2012-04-12T16:35:02.230 回答