Sql 列属性“序号位置”无效[导入和导出向导-Visual FoxPro ProviderDescriptors.xml SSIS]
我正在尝试将Visual FoxPro数据库同步到SQL Server数据库。 我正在使用SQL Server数据工具中的SQL Server导入和导出向导 当我单击“编辑映射”时。。。我首先遇到了4个相同问题的错误,然后在ProviderDescriptors.xml中更改了一些值,结果是:Sql 列属性“序号位置”无效[导入和导出向导-Visual FoxPro ProviderDescriptors.xml SSIS],sql,sql-server,ssis,odbc,visual-foxpro,Sql,Sql Server,Ssis,Odbc,Visual Foxpro,我正在尝试将Visual FoxPro数据库同步到SQL Server数据库。 我正在使用SQL Server数据工具中的SQL Server导入和导出向导 当我单击“编辑映射”时。。。我首先遇到了4个相同问题的错误,然后在ProviderDescriptors.xml中更改了一些值,结果是: <dtm:ColumnSchemaAttributes NameColumnName = "COLUMN_NAME" OrdinalPositionColumnN
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "LENGTH"
NumericPrecisionColumnName = "PRECISION"
NumericScaleColumnName = "SCALE"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
现在唯一的错误是OrdinalPositionColumnName
错误:列属性序号位置无效
使用Visual FoxPro ODBC驱动程序时,OrdinalPositionColumnName要使用哪个值
谢谢你的帮助 以下是一个示例:
void Main()
{
string sqlConnectionString = @"server=.\SQLExpress;Trusted_Connection=yes;Database=Test";
// c:\MyDataFolder\myTable.dbf
string dataPath = @"c:\MyDataFolder";
string tableName = @"MyTable";
Stopwatch sw = new Stopwatch(); // just for timing the sample run
sw.Start();
using (OleDbConnection cn = new OleDbConnection("Provider=VFPOLEDB;Data Source=" + dataPath))
using (SqlConnection scn = new SqlConnection(sqlConnectionString))
{
OleDbCommand cmd = new OleDbCommand($"select * from {tableName}", cn);
SqlBulkCopy sbc = new SqlBulkCopy(scn, SqlBulkCopyOptions.TableLock, null);
// Needed if VFP-SQL Server tables' field count or names are different
// ie: LName in VFP might be LastName in SQL server
// or VFP might have 10 fields when SQL server 8
// VFP column names on left, SQL server column names on right
sbc.ColumnMappings.Add("Category", "[Category]");
sbc.ColumnMappings.Add("Activity", "[Activity]");
sbc.ColumnMappings.Add("PersonId", "[PersonId]");
sbc.ColumnMappings.Add("FirstName", "[FirstName]");
sbc.ColumnMappings.Add("MidName", "[MidName]");
sbc.ColumnMappings.Add("LastName", "[LastName]");
sbc.ColumnMappings.Add("Email", "[Email]");
cn.Open();
scn.Open();
// Since this is a sample, instead of wrting to a table
// creating and writing to a global temporary table
// You can see this table's data, connecting to the same database (global temp)
SqlCommand createTemp = new SqlCommand();
createTemp.CommandText = @"create table ##PersonData
(
[Id] int identity primary key,
[Category] varchar(50),
[Activity] varchar(50) default 'NullOlmasin',
[PersonId] varchar(50),
[FirstName] varchar(50),
[MidName] varchar(50),
[LastName] varchar(50),
[Email] varchar(50)
)";
createTemp.Connection = scn;
createTemp.ExecuteNonQuery();
OleDbDataReader rdr = cmd.ExecuteReader();
sbc.NotifyAfter = 100000;
sbc.BatchSize = 1000;
sbc.BulkCopyTimeout = 10000;
sbc.DestinationTableName = "##PersonData";
sbc.SqlRowsCopied += (sender, e) =>
{
Console.WriteLine("-- Copied {0} rows to {1}.[{2} milliseconds]",
e.RowsCopied,
((SqlBulkCopy)sender).DestinationTableName,
sw.ElapsedMilliseconds);
};
sbc.WriteToServer(rdr);
if (!rdr.IsClosed) { rdr.Close(); }
cn.Close();
scn.Close();
}
sw.Stop();
Console.WriteLine($"Done in {sw.ElapsedMilliseconds} milliseconds.");
}
版本6.x之后没有Foxpro ODBC驱动程序。请改用VFPOLEDB驱动程序。@CetinBasoz谢谢您的回复!我无法使用Microsoft OLE DB Provider for Visual FoxPro,因为当我选择它并点击属性时,它会崩溃……我从未将它用于SSIS。我总是用VFP或C,Go。。。您可以在链接服务器中尝试VFPOLEDB。顺便说一句,它是一个32位的驱动程序,低于64位就不能工作。我的MS SQl Server是64位的,所以可能无法工作。我如何编写C程序将FVP自由表数据库导入SQl Server?您可以使用SqlBulkCopy类。如果你愿意,我可以给你一个示例代码作为答案。