全部,我正在使用SQL 2014和Visual Studio 2013。
我有一个无法执行的脚本任务。正在读取,但无法正常工作。此任务创建表并将数据插入表中。我需要使用脚本任务来执行此操作,因为有100多个TSV文件,并且字段可能每个月更改一次,并且很难为每个表维护单个节点。
如果您查看代码段,则消息框(1)会触发,但是脚本之后便会出错-我相信(2):
错误消息是:
我认为此错误是指任务中无法访问或拼写错误的变量等。我已经检查了这些广告恶心-认为不是。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
您的代码中的问题是,您正在脚本代码中创建ADO.NET(C#标准)连接,但是此连接的 base -DBconn
连接管理器-是一个OLEDB连接管理器。这两个连接不能相互转换。
建议:
DBconn
连接管理器创建为ADO.NET。然后您的代码应该工作了。 DBconn
作为OLEDB连接管理器,则必须基于SqlConnection
在脚本任务中创建DBconn
连接。我已经完成了从OLEDB conn字符串构建ADO.NET的连接字符串并使用该连接字符串创建新的SqlConnection
的操作。 下面是用于生成连接字符串的函数的代码示例。
using RuntimeWrapper = Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Data.OleDb;
using System.Data.SqlClient;
using Microsoft.SqlServer.Dts.Runtime;
static string Get_ManagedConnString(string Src_Name, ConnectionManager CM)
{
if (CM.CreationName != "OLEDB")
throw new Exception(string.Format("Cannot get Conn String from non-OLEDB Conn manager {0}", CM.Name));
RuntimeWrapper.IDTSConnectionManagerDatabaseParameters100 cmParams_Src = CM.InnerObject as RuntimeWrapper.IDTSConnectionManagerDatabaseParameters100;
OleDbConnection oledbConn_Src = cmParams_Src.GetConnectionForSchema() as OleDbConnection;
OleDbConnectionStringBuilder oledbCSBuilder_Src = new OleDbConnectionStringBuilder(oledbConn_Src.ConnectionString);
SqlConnectionStringBuilder sqlCSBuilder_Src = new SqlConnectionStringBuilder();
sqlCSBuilder_Src.DataSource = oledbCSBuilder_Src["Data Source"].ToString();
sqlCSBuilder_Src.InitialCatalog = oledbCSBuilder_Src["Initial Catalog"].ToString();
if (oledbCSBuilder_Src["integrated security"].ToString() == "SSPI")
{
sqlCSBuilder_Src.IntegratedSecurity = true;
}
else
{
sqlCSBuilder_Src.UserID = oledbCSBuilder_Src["User ID"].ToString();
sqlCSBuilder_Src.Password = oledbCSBuilder_Src["Password"].ToString();
}
return sqlCSBuilder_Src.ConnectionString;
}