C#使用mssql2012导入向导

时间:2014-08-12 12:52:51

标签: c#

是否可以将mssql2012导入向导用于包含c#代码的数据库和表? 我想编写一个程序,我可以将数据库和访问数据库的表导入mssql db。因此,作为一个gui,mssql2012导入向导工作正常,我只需要在我的项目中的c#代码中实现它。 .net框架中是否有任何预构建的类?

此致

2 个答案:

答案 0 :(得分:1)

我建议您使用Bulk Insert。这已经被管理到.NET类SqlBulkCopy

答案 1 :(得分:1)

如果您只想将数据导入数据库,请使用SqlBulkCopy。导入向导不仅仅是将一批数据发送到服务器。

实际上,导入向导会创建并执行带有数据转换的SSIS包,该数据包从源中提取数据并将其发送到目标。它本身并没有做任何事情。向导的最后一步允许您保存生成的包并再次使用它,就像使用任何其他SSIS包一样。

您可以使用" Loading and Running a Local Package Programmatically"中的代码提供程序加载已保存的包并执行它。示例代码非常简单:

  string pkgLocation;
  Package pkg;
  Application app;
  DTSExecResult pkgResults;

  pkgLocation =
    @"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" +
    @"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx";
  app = new Application();
  pkg = app.LoadPackage(pkgLocation, null);
  pkgResults = pkg.Execute();

  Console.WriteLine(pkgResults.ToString());

如果您想每次都创建一个新包,可以使用EzAPI library以编程方式创建包,保存和/或执行它。 MSDN博客包含用于创建简单数据流任务的示例:

public class EzOleDbToFilePackage : EzSrcDestPackage<EzOleDbSource, EzSqlOleDbCM, EzFlatFileDestination, EzFlatFileCM>
{
    public EzOleDbToFilePackage(Package p) : base(p) { }
    public static implicit operator EzOleDbToFilePackage(Package p) { return new EzOleDbToFilePackage(p); }

    public EzOleDbToFilePackage(string srv, string db, string table, string file)
        : base()
    {
        SrcConn.SetConnectionString(srv, db);
        Source.Table = table;
        DestConn.ConnectionString = file;
        Dest.Overwrite = true;
        // This method defines the columns in FlatFile connection manager which have the same
        // datatypes as flat file destination
        Dest.DefineColumnsInCM();
    }

    [STAThread]
    static void Main(string[] args)
    {
        // DEMO 2
        EzOleDbToFilePackage p2 = new EzOleDbToFilePackage("localhost", "AdventureWorks", "Address", "result.txt");
        p2.DataFlow.Disable = true;
        p2.Execute();
        Console.Write(string.Format("Package2 executed with result {0}\n", p2.ExecutionResult));
    }
}

您应该注意,如果生成的默认映射不适合您的任务,则您必须在代码中单独定义每个映射。