2015-01-15 4 views
0

AseBulkCopy.WriteToServer을 사용하여 임시 테이블을 채울 수 있습니까?Sybase BulkCopy WriteToServer 오류 : ','근처의 구문이 잘못되었습니다

필자는 아래의 메소드를 테스트 애플리케이션에서 두 번 호출합니다. 첫째는 비 임시 테이블과 두 번째로 임시 테이블입니다. 이 코드는 비 임시 테이블과 잘 실행하지만, 임시 테이블을 오류 채울하려고 할 때 :

Incorrect syntax near ','.

가 발생합니다.

두 경우 모두 대상 테이블과 소스 테이블에는 같은 이름의 INT로 정의 된 단 하나의 열만 있습니다.

데이터 원본으로 IDataReader와 DataTable을 사용하려고 시도했지만 둘 다 동일한 오류가 발생합니다.

"EnableBulkLoad = 1"및 "EnableBulkLoad = 2"를 모두 연결 문자열에서 사용하려고했습니다.

원시 임시 테이블 이름과 "dbo"라는 접두어가 붙은 이름을 모두 사용해 보았습니다.

로드 할 데이터는 긴 행이나 여러 행이있는 경우에도 발생하지만 단일 int 값 (즉, 1 행, 1 열)입니다.

AseCommand.ExecuteNonQuery를 사용하여 임시 테이블에 데이터를 삽입 할 수 있으며 AseCommand.ExecuteScalar를 사용하여 임시 테이블에서 'SELECT COUNT (1)'을 성공적으로 실행할 수 있습니다. 그것은 WriteToServer를 사용하여 임시 테이블을 채울 수 있습니다, 첫째

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"); 
    } 
    } 

: 여기

코드인가? 그것이 맞다고 가정 할 때 내가 뭘 잘못하고있는 것일까 요?

UPDATE : 내가 그렇게 WriteToServer를 사용할 때 임시 테이블의 이름은 방법에 대해이 규칙이며,

blk.DestinationTableName = "XXXX"; 

저도 같은 오류로 라인

blk.DestinationTableName = tableName; 

을 변경하면? tableName 값은 직접 INSERTSELECT COUNT(1) 쿼리에 사용하고 있으므로 올바른 것으로 예상했습니다.

덕분에 내 경험에

답변

0

는 응답이 아니오, 당신은 임시 테이블을 채우는 데 AseBulkCopy.WriteToServer을 사용할 수 없습니다.