2015-01-15 75 views
0

是否可以使用AseBulkCopy.WriteToServer填充临时表?Sybase BulkCopy WriteToServer错误:“,'附近的语法不正确

我在我的测试应用程序中调用了下面的方法两次:第一次使用非临时表,第二次使用临时表。该代码运行正常与非临时表,而是试图填充一个临时表中的错误时:

Incorrect syntax near ','.

提高。

在这两种情况下,目标表和源表都只有一列,被定义为具有相同名称的INT。

我已经尝试使用DataTable和IDataReader作为数据的来源,并且都导致提出相同的错误。

我已经尝试在连接字符串中同时使用“EnableBulkLoad = 1”和“EnableBulkLoad = 2”。

我曾尝试使用原始临时表名称和带有“dbo”前缀的名称。

要加载的数据是一个单一的int值(即1行1列),尽管如果有更长的行或多行也会发生这种情况。

值得注意的是,我可以将数据插入临时表(使用AseCommand.ExecuteNonQuery),并且可以从临时表(使用AseCommand.ExecuteScalar)成功执行'SELECT COUNT(1)'。

下面是代码:

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临时表? 假设是这样,我可能会做错什么?

UPDATE: 当我改变行

blk.DestinationTableName = tableName; 

blk.DestinationTableName = "XXXX"; 

我得到了同样的错误,那么,有没有规则,规定临时表是如何使用WriteToServer时命名? tableName的值是我用于查询的直接INSERTSELECT COUNT(1),所以我预计它是正确的。

感谢

回答

0

以我的经验,答案是否定的,你不能使用AseBulkCopy.WriteToServer到一个临时表。