OleDbParameter를 사용하여 액세스 할 테이블 만들기

검게 탐

현재 SQL Server에서 C #을 통해 Access로 테이블을 다시 작성하고 있습니다.

이를 위해 SQL Server에서 사용되는 데이터 형식을 가져 와서 OleDbType 개체에 매핑합니다.

불행히도, Access에 대한 문을 실행하려고 할 때마다 "Create Table"문에 구문 오류가 있다는 예외가 발생합니다. 매핑 된 데이터 유형을 OleDbParameters가 아닌 텍스트로 추가하기 때문이라고 생각합니다.

OleDbParameter- "Create Table"문에 대한 열 이름과 데이터 유형을 포함하는 개체를 만드는 방법이 있습니까?

String accessConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;Data 
Source=" + filepath;

using (OleDbConnection accessConnection = new OleDbConnection(accessConnectionString))
{
     ADOX.Catalog cat = new ADOX.Catalog();
     cat.Create(accessConnectionString);
     OleDbCommand oleCommand = new OleDbCommand();
     oleCommand.Connection = accessConnection;
     oleCommand.CommandType = CommandType.Text;
     accessConnection.Open();

     String columnsCommandText = "(";

     for (int i = 0; i < reader.GetSchemaTable().Rows.Count; i++) // reader contains data from SQL Server 
     {
         var column = reader.GetName(i); // name of attribute
         SqlDbType type = (SqlDbType)(int)reader.GetSchemaTable().Rows[i]["ProviderType"]; // data type
         var accessType = SQLAccessMapper.MapDataTypes(type);
         columnsCommandText +=  " " + column + " " + accessType + ",";
     }

     columnsCommandText = columnsCommandText.Remove(columnsCommandText.Length - 1);
     columnsCommandText += ")";

     oleCommand.CommandText = "CREATE TABLE " + tablename + columnsCommandText;

     oleCommand.ExecuteNonQuery(); // Exception

매퍼 :

static class SQLAccessMapper
{
    public static OleDbType MapDataTypes(SqlDbType sqlDataType)
    {
        switch (sqlDataType)
        {
            case SqlDbType.Int:
                return OleDbType.Integer;
            case SqlDbType.SmallInt:
                return OleDbType.SmallInt;
            case SqlDbType.TinyInt:
                return OleDbType.TinyInt;
            case SqlDbType.Decimal:
                return OleDbType.Decimal;
            case SqlDbType.Float:         
            case SqlDbType.Real:
                return OleDbType.Single;

            case SqlDbType.BigInt:
                return OleDbType.BigInt;
            case SqlDbType.Char:
                return OleDbType.Char;
            case SqlDbType.NChar:
                return OleDbType.WChar;
            case SqlDbType.NText:                
            case SqlDbType.NVarChar:
            case SqlDbType.Text:
                return OleDbType.VarWChar;

            case SqlDbType.VarChar:
                return OleDbType.VarChar;
            case SqlDbType.Time:
                return OleDbType.DBTime;

            case SqlDbType.Date:
                return OleDbType.DBDate;

            case SqlDbType.DateTime:
            case SqlDbType.DateTime2:                  
            case SqlDbType.DateTimeOffset:                   
            case SqlDbType.SmallDateTime:
            case SqlDbType.Timestamp:
                return OleDbType.DBTimeStamp;

            case SqlDbType.Binary:
                return OleDbType.Binary;
            case SqlDbType.VarBinary:
                return OleDbType.VarBinary;

            case SqlDbType.Money:   
            case SqlDbType.SmallMoney:
                return OleDbType.Currency;

            case SqlDbType.Bit:
                return OleDbType.Boolean;
            default: return OleDbType.Error;
        }

    }

}

예문 Create Table:

CREATE TABLE GrTable(
GrtId Integer, 
CaseId Integer, 
GrDrg VarChar, 
GrDrgText VarWChar, 
Mdc VarChar, 
MdcText VarWChar, 
GrPartition VarChar, 
Baserate Decimal, 
LosUsed Integer, 
Htp Integer, 
PricePerDay Decimal, 
Ltp Integer, 
LtpPricePerDay Decimal, 
AverLos Decimal, 
AverlosPricePerDay Decimal, 
Eff Decimal,
Std Decimal,
Adj Decimal, 
Gst VarChar, 
Pccl Integer,
PriceEff Decimal,
PriceStd Decimal, 
PriceAdj Decimal, 
DaysExcHtp Integer,
DaysBelowLtp Integer, 
DaysBelowAverLos Integer, 
TotalPrice Decimal,
BaseratePeriod VarChar)
스티브

주요 문제는 MapDataTypes에 있습니다. MS-Access 엔진에서 예상하는 문자열을 반환해야하며 지금처럼 일반 열거 형 SqlDbType을 문자열로 자동 변환하지 않아야합니다.

예를 들면. VarWChar 유형의 열의 경우 문자열 "TEXT"다음에 필드 크기를 전달해야하며 정수 유형의 필드에는 "INT"문자열이 필요합니다.

public static string MapDataTypes(SqlDbType sqlDataType)
{
    switch (sqlDataType)
    {
        case SqlDbType.Int:
            return "INT";
        case SqlDbType.VarChar:
            return "TEXT(80)";

        ... AND SO ON FOR EVERY POSSIBLE TYPE

   }
}

물론 이것은 TEXT 필드의 크기 문제를 야기하지만 ColumnSize라는 열에서 유형을 찾는 데 사용 된 것과 동일한 GetSchemaTable에서이를 검색하고이 크기를 MapDataTypes 메서드에 전달할 수 있습니다.

public static string MapDataTypes(SqlDbType sqlDataType, int size)
{
    switch (sqlDataType)
    {
        case SqlDbType.Int:
            return "INT";
        case SqlDbType.VarChar:
            return "TEXT(" + size + )";
        .....


   }
}

SQL 데이터 유형 에서 허용되는 일부 유형을 찾을 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Sqlalchemy를 사용하여 기존 테이블에 액세스하는 방법

분류에서Dev

자바 스크립트를 사용하여 테이블 만들기

분류에서Dev

PHP를 사용하여 텍스트 파일에서 테이블 만들기

분류에서Dev

자바 스크립트를 사용하여 HTML 테이블 만들기

분류에서Dev

VBA를 사용하여 SQL이 아닌 한 액세스 테이블에서 다른 액세스 테이블로 쓰기

분류에서Dev

HDP : Hive Thrift를 사용하여 JDBC를 통해 Spark RDD 테이블에 액세스 할 수 있도록 설정

분류에서Dev

AC 포인터를 사용하여 Lua 테이블 요소에 액세스 할 수 있습니까?

분류에서Dev

여러 SELECT를 사용하여 새 테이블 만들기

분류에서Dev

FMDB Swift를 사용하여 여러 테이블 만들기

분류에서Dev

VBA를 사용하여 액세스 테이블에 문 삽입

분류에서Dev

varchar를 기본 키로 사용하여 테이블 만들기

분류에서Dev

Flask-SQLAlchemy를 사용하여 기본 테이블 만들기

분류에서Dev

사용자가 액세스 할 수있는 SQL보기를 만들어야하지만이 사용자는 데이터베이스에 액세스 할 수 없습니다.

분류에서Dev

exceljs를 사용하여 데이터 테이블 만들기

분류에서Dev

데이터베이스의 데이터를 사용하여 라라 벨로 실제 테이블 만들기

분류에서Dev

JavaScript를 사용하여 테이블에서 다중 시리즈 FusionCharts에 대한 데이터 세트 만들기

분류에서Dev

JavaScript를 사용하여 div로 테이블 만들기

분류에서Dev

절차를 사용하여 테이블 만들기

분류에서Dev

PHP-STR_PAD를 사용하여 테이블 만들기

분류에서Dev

jQuery를 사용하여 테이블에서 배열 만들기

분류에서Dev

zymichost를 사용하여 테이블 만들기

분류에서Dev

Mushtache.js를 사용하여 테이블 만들기

분류에서Dev

UNIQUEIDENTIFIER를 PK로 사용하여 테이블 만들기

분류에서Dev

JSON에서 Javascript를 사용하여 테이블 만들기

분류에서Dev

Django에서 쿼리를 사용하여 테이블 만들기

분류에서Dev

mustache.js를 사용하여 테이블 만들기

분류에서Dev

Postgres를 사용하여 django 1.10의 모델에서 데이터베이스 테이블 만들기

분류에서Dev

여러 변수를 사용하여 R로 테이블 만들기 (리스트 솔루션)

분류에서Dev

주석이 달린 클래스를 위해 Hibernate를 사용하여 테이블 만들기

Related 관련 기사

  1. 1

    Sqlalchemy를 사용하여 기존 테이블에 액세스하는 방법

  2. 2

    자바 스크립트를 사용하여 테이블 만들기

  3. 3

    PHP를 사용하여 텍스트 파일에서 테이블 만들기

  4. 4

    자바 스크립트를 사용하여 HTML 테이블 만들기

  5. 5

    VBA를 사용하여 SQL이 아닌 한 액세스 테이블에서 다른 액세스 테이블로 쓰기

  6. 6

    HDP : Hive Thrift를 사용하여 JDBC를 통해 Spark RDD 테이블에 액세스 할 수 있도록 설정

  7. 7

    AC 포인터를 사용하여 Lua 테이블 요소에 액세스 할 수 있습니까?

  8. 8

    여러 SELECT를 사용하여 새 테이블 만들기

  9. 9

    FMDB Swift를 사용하여 여러 테이블 만들기

  10. 10

    VBA를 사용하여 액세스 테이블에 문 삽입

  11. 11

    varchar를 기본 키로 사용하여 테이블 만들기

  12. 12

    Flask-SQLAlchemy를 사용하여 기본 테이블 만들기

  13. 13

    사용자가 액세스 할 수있는 SQL보기를 만들어야하지만이 사용자는 데이터베이스에 액세스 할 수 없습니다.

  14. 14

    exceljs를 사용하여 데이터 테이블 만들기

  15. 15

    데이터베이스의 데이터를 사용하여 라라 벨로 실제 테이블 만들기

  16. 16

    JavaScript를 사용하여 테이블에서 다중 시리즈 FusionCharts에 대한 데이터 세트 만들기

  17. 17

    JavaScript를 사용하여 div로 테이블 만들기

  18. 18

    절차를 사용하여 테이블 만들기

  19. 19

    PHP-STR_PAD를 사용하여 테이블 만들기

  20. 20

    jQuery를 사용하여 테이블에서 배열 만들기

  21. 21

    zymichost를 사용하여 테이블 만들기

  22. 22

    Mushtache.js를 사용하여 테이블 만들기

  23. 23

    UNIQUEIDENTIFIER를 PK로 사용하여 테이블 만들기

  24. 24

    JSON에서 Javascript를 사용하여 테이블 만들기

  25. 25

    Django에서 쿼리를 사용하여 테이블 만들기

  26. 26

    mustache.js를 사용하여 테이블 만들기

  27. 27

    Postgres를 사용하여 django 1.10의 모델에서 데이터베이스 테이블 만들기

  28. 28

    여러 변수를 사용하여 R로 테이블 만들기 (리스트 솔루션)

  29. 29

    주석이 달린 클래스를 위해 Hibernate를 사용하여 테이블 만들기

뜨겁다태그

보관