プログラムで使っているテーブルのあるフィールドが設計ミスで使われていないことに気づき、せっかくだからそのフィールドのデータ型を変えて別の用途に使ってみようというトリッキーなことをやろうとしたけれど、やっぱりやめることにした。こういうのは大抵上手くはいかず、別のもっと良い方法がある。でも、途中まで調べたので記念に残しておく。
やろうとしたことは、テーブル内にある使ってないフィールドのデータ型=char型をlongchar型に変えてみようとした。プログラムの処理としては、フィールドのデータ型がchar型ならlongchar型に変えるsqlを走らせる、というもの。
データ型を取得する際のポイントは、OleDbCommandのExecuteReader().GetDataTypeName(0) という部分。これで対象のフィールドのデータ型が手に入る。実際に取得してみたらdbtype_wvarcharという値が取得できた。
dim sqlStrType as string = "select field1 from table1"
Dim isDataType As OleDb.OleDbCommand = cn.CreateCommand
Dim fieldType As String
isDataType.CommandText = sqlStrType
cn.Open()
fieldType = is_data_type.ExecuteReader().GetDataTypeName(0)
cn.Close()
'char型の場合(=DBTYPE_WVARCHAR)
If fieldType = "DBTYPE_WVARCHAR" Then
'データ型をテキスト型からメモ型へ変換する
dim sqlStrChange as string = "alter table table1 alter column field1 longchar"
Dim changeType As OleDb.OleDbCommand = cn.CreateCommand
change_type.CommandText = sqlStrChange
cn.Open()
changeType.ExecuteNonQuery()
cn.Close()
'通常の処理
'longchar型の場合(=DBTYPE_WLONGVARCHAR)
ElseIf fieldType = "DBTYPE_WLONGVARCHAR" Then
'通常の処理
End If