是否可以将mssql2012导入向导用于包含c#代码的数据库和表? 我想编写一个程序,我可以将数据库和访问数据库的表导入mssql db。因此,作为一个gui,mssql2012导入向导工作正常,我只需要在我的项目中的c#代码中实现它。 .net框架中是否有任何预构建的类?
此致
答案 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));
}
}
您应该注意,如果生成的默认映射不适合您的任务,则您必须在代码中单独定义每个映射。