Sybase BulkCopy WriteToServer error: Incorrect syntax near ','
Sybase BulkCopy WriteToServer error: Incorrect syntax near ','
是否可以使用 AseBulkCopy.WriteToServer
填充临时 table?
我在我的测试应用程序中调用了以下方法两次:第一次使用非临时 table,第二次使用临时 table。代码在非临时 table 下运行良好,但在尝试填充临时 table 时出现错误:
Incorrect syntax near ','.
提出。
在这两种情况下,目标和源 table 都只有一个列,定义为具有相同名称的 INT。
我曾尝试使用 DataTable 和 IDataReader 作为数据源,但都导致出现相同的错误。
我尝试在连接字符串中同时使用 "EnableBulkLoad=1" 和 "EnableBulkLoad=2"。
我试过使用原始临时 table 名称和前缀为 "dbo."
的名称
要加载的数据是单个 int 值(即 1 行 1 列),但如果有更长的行或多行也会发生这种情况。
值得注意的是,我可以将数据插入到临时 table(使用 AseCommand.ExecuteNonQuery)并且可以从临时 table 执行 'SELECT COUNT (1)'(使用 AseCommand.ExecuteScalar) 成功。
代码如下:
private static void BulkCopyInsertIntoTable(string tableName)
{
IDataReader dataSource = null;
SqlConnection sourceConnection = null;
MssqlCommand.GetDataReader(SqlServerConnectionString, out sourceConnection, out dataSource);
AseConnection targetConnection = new AseConnection(SybaseConnectionString);
try
{
targetConnection.Open();
AseCommand cmd = new AseCommand();
AseBulkCopy blk = new AseBulkCopy(targetConnection);
blk.DestinationTableName = tableName;
//blk.ColumnMappings.Clear();
//blk.ColumnMappings.Add(new AseBulkCopyColumnMapping(0, 0));//Doesn't make any difference with a datasource, causes an error to be raised with a datatable.
Console.WriteLine("bulkcopy insert into the table " + tableName + " ..starting: datasource");
//blk.WriteToServer(dataSource);
Console.WriteLine("bulkcopy insert into the table " + tableName + " ..starting: datatable");
blk.ColumnMappings.Clear();
DataTable dt = SybaseCommand.GetFakeDataTable(); ;
blk.WriteToServer(dt);
}
catch (AseException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
targetConnection.Dispose();
Console.WriteLine("bulkcopy insert into the table " + tableName + " ..ended");
}
}
首先,是否可以使用 WriteToServer
填充临时 table?
假设是,我可能做错了什么?
更新:
当我换行时
blk.DestinationTableName = tableName;
到
blk.DestinationTableName = "XXXX";
我得到了同样的错误,那么在使用 WriteToServer
时是否有关于如何命名 temp table 的规则? tableName 的值是我用于直接 INSERT
和 SELECT COUNT(1)
查询的值,因此我希望它是正确的。
谢谢
根据我的经验,答案是否定的,您不能使用 AseBulkCopy.WriteToServer 来填充临时 table。
是否可以使用 AseBulkCopy.WriteToServer
填充临时 table?
我在我的测试应用程序中调用了以下方法两次:第一次使用非临时 table,第二次使用临时 table。代码在非临时 table 下运行良好,但在尝试填充临时 table 时出现错误:
Incorrect syntax near ','.
提出。
在这两种情况下,目标和源 table 都只有一个列,定义为具有相同名称的 INT。
我曾尝试使用 DataTable 和 IDataReader 作为数据源,但都导致出现相同的错误。
我尝试在连接字符串中同时使用 "EnableBulkLoad=1" 和 "EnableBulkLoad=2"。
我试过使用原始临时 table 名称和前缀为 "dbo."
的名称要加载的数据是单个 int 值(即 1 行 1 列),但如果有更长的行或多行也会发生这种情况。
值得注意的是,我可以将数据插入到临时 table(使用 AseCommand.ExecuteNonQuery)并且可以从临时 table 执行 'SELECT COUNT (1)'(使用 AseCommand.ExecuteScalar) 成功。
代码如下:
private static void BulkCopyInsertIntoTable(string tableName)
{
IDataReader dataSource = null;
SqlConnection sourceConnection = null;
MssqlCommand.GetDataReader(SqlServerConnectionString, out sourceConnection, out dataSource);
AseConnection targetConnection = new AseConnection(SybaseConnectionString);
try
{
targetConnection.Open();
AseCommand cmd = new AseCommand();
AseBulkCopy blk = new AseBulkCopy(targetConnection);
blk.DestinationTableName = tableName;
//blk.ColumnMappings.Clear();
//blk.ColumnMappings.Add(new AseBulkCopyColumnMapping(0, 0));//Doesn't make any difference with a datasource, causes an error to be raised with a datatable.
Console.WriteLine("bulkcopy insert into the table " + tableName + " ..starting: datasource");
//blk.WriteToServer(dataSource);
Console.WriteLine("bulkcopy insert into the table " + tableName + " ..starting: datatable");
blk.ColumnMappings.Clear();
DataTable dt = SybaseCommand.GetFakeDataTable(); ;
blk.WriteToServer(dt);
}
catch (AseException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
targetConnection.Dispose();
Console.WriteLine("bulkcopy insert into the table " + tableName + " ..ended");
}
}
首先,是否可以使用 WriteToServer
填充临时 table?
假设是,我可能做错了什么?
更新: 当我换行时
blk.DestinationTableName = tableName;
到
blk.DestinationTableName = "XXXX";
我得到了同样的错误,那么在使用 WriteToServer
时是否有关于如何命名 temp table 的规则? tableName 的值是我用于直接 INSERT
和 SELECT COUNT(1)
查询的值,因此我希望它是正确的。
谢谢
根据我的经验,答案是否定的,您不能使用 AseBulkCopy.WriteToServer 来填充临时 table。