プログラムで使っているテーブルのあるフィールドが設計ミスで使われていないことに気づき、せっかくだからそのフィールドのデータ型を変えて別の用途に使ってみようというトリッキーなことをやろうとしたけれど、やっぱりやめることにした。こういうのは大抵上手くはいかず、別のもっと良い方法がある。でも、途中まで調べたので記念に残しておく。
やろうとしたことは、テーブル内にある使ってないフィールドのデータ型=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