private bool ExecDtspackage(string DTS_HOME,string packageName,string bdzdm)
{
    DTS.Package2Class package = new DTS.Package2Class();
    try
    {
        Object MIA=System.Reflection.Missing.Value;
        package.LoadFromStorageFile(DTS_HOME+packageName+".dts","","","",packageName,ref MIA);
        if(bdzdm!=null&&bdzdm!="")//如果变电站的代码为空就是线路的DTS包
        {
package.GlobalVariables.Item("bdzid_scmis").let_Value(bdzdm);
package.SaveToStorageFile("D:\\aa.dts","","",ref MIA,false);
        }
        package.Execute();
    }
    catch(Exception er)
    {
Response.Write("erro:::"+er.ToString());
return false;
    }
    finally
    {
package.UnInitialize();
    }
    return true;
}
上面是我C#调用DTS包的代码,现在运行到
package.SaveToStorageFile("D:\\aa.dts","","",ref MIA,false);
时候捕获到异常,我使用Response.Write("erro:::"+er.ToString());显示异常错误信息,在IE中显示以下信息:
erro:::System.Runtime.InteropServices.COMException (0x80030005): 拒绝访问。 at DTS.Package2Class.SaveToStorageFile(String UNCFile, String OwnerPassword, String OperatorPassword, Object& pVarPersistStgOfHost, Boolean bReusePasswords) at DtsWeb.ExecDts.ExecDtspackage(String DTS_HOME, String packageName, String bdzdm) in d:\dtsweb\execdts.aspx.cs:line 120false请指点为什么会这样,直接使用SQLServer执行aa.dts包是正常运行的.

解决方案 »

  1.   

    在VS.NET 2005 菜单:网站->添加引用: protected void Page_Load(object sender, EventArgs e)
        {
            DTS.Package2Class package = new DTS.Package2Class(); //在使用前请添加引用dtspkg.dll文件;
            Object MIA=System.Reflection.Missing.Value;
            package.LoadFromSQLServer("zg","ZG", "123456", DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_Default, "", "","", "Jgdm_DTS",ref MIA);
            package.Execute();
            //package.UnInitialize();
            //package = null;
            Response.Redirect("JgdmRule.aspx");    }Jgdm_DTS是包名,最好是设计器设计完成的包。
    该段程序在家机器测试通过。win2003,sql,vs2005,iis6.0.  fw 2.0
     
    不过很奇怪,在我公司电脑包没执行成功。
    以上代码供参考,同时希望高手完善。