我在SSIS包中工作。我有一些C#脚本用于将表名放入对象变量(Access表)。代码连接到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#很陌生,所以任何建议都会非常感激。感谢
答案 0 :(得分: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() + "]");
但是,如果您的格式变得非常复杂,则不鼓励连接。
答案 1 :(得分:1)
如果表名是"2010"
,您只需将其包装在方括号中,"[" + "2012" + "]"
。
如果您在变量中使用'2012',则可以执行类似
的操作string strTableName = "2012";
strTableName = String.Format("[{0}]", strTableName);
我希望这会有所帮助。