2009-04-22 11 views
3

MSアクセスデータベースにテーブルを作成する必要があります。 'ConfigStructure.mdb'が自分のデータベース名であり、C#でこのデータベースにテーブルを作成する必要があると考えてください。C#でMSアクセスデータベースにテーブルを作成する方法

どうすればいいですか?私は以下のコードで試してみましたが、動作しません。

 OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + frmMain.strFilePath + "\\ConfigStructure.mdb"); 
     myConnection.Open(); 
     string strTemp = " KEY Text, VALUE Text "; 
     OleDbCommand myCommand = new OleDbCommand(); 
     myCommand.Connection = myConnection; 
     myCommand.CommandText = "CREATE TABLE table1(" + strTemp + ")"; 
     myCommand.ExecuteNonQuery(); 
     myCommand.Connection.Close(); 

これは私が取得エラーです、

"System.Data.OleDb.OleDbException: Syntax error in field definition 
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)" 
+0

これを実行しようとすると、エラーや警告を追加できますか? –

答えて

15

string strTemp = " [KEY] Text, [VALUE] Text "; 

string strTemp = " KEY Text, VALUE Text "; 

を交換し、私はこの理由は、その 'KEY' であると思います'VALUE'はAccessまたはSの予約キーワードですQL。

1

問題はKEYを列名として使用していると思われます。これはおそらく予約語です。異なる列名を使用してみてください。

2

KEYとVALUEはともにreserved wordsです。特に、CREATE TABLEコマンドの中でPRIMARY KEYを制約として指定できるので、おそらく "KEY"にハングアップしている可能性があります。

が実際に(推奨されていません)を使用する場合は、別の列名を使用するか、かっこで囲みます([KEY]など)。

1

"KEY"と "VALUE"は、MS Accessの予約語です。あなたがあなたのフィールドにそれらの名前を使用したい場合は、角括弧で囲みする必要があります。私のコンピューター、Windows 7のSP1 Professionalの64ビットのオン

string strTemp = " [KEY] Text, [VALUE] Text "; 
0

を、私はマイクロソフトADO外部が見つかりました。 C:¥Program Files¥Common Files¥System¥ado¥msadox28.dll のDDLとセキュリティでは2.8です。

また、参考として発見された:参照デフォルトで

enter image description here

ADOXとして含まれ

は、列はテキストとして作成されています[ 255]。異なるデータ型として列を作成する例をいくつか示します。

table.Columns.Append("PartNumber", ADOX.DataTypeEnum.adVarWChar, 6); // text[6] 
table.Columns.Append("AnInteger", ADOX.DataTypeEnum.adInteger); // Integer 

私はデータ型のリストを作成することが判明し、アクセスデータベースフィールドを読み

アクセステキスト= adVarWChar

アクセスメモ= adLongVarWChar

アクセス数値バイト= adUnsignedTinyInt

アクセス数値整数= adSmallInt

アクセス数値長整数= adInteger

アクセス数値単精度= adSingle

アクセス数値倍精度= adDouble

アクセス数値Replicatie-ID = adGuid

アクセス数値進= adNumeric

アクセス日時=追加日

アクセス通貨= adCurrency

アクセスオートナンバー= adInteger

アクセスはい/いいえ= adBoolean

アクセスのHyperLink = adLongVarWChar

0

あなたは常にこれらのテーブルと列の名前を書く必要があります[] 例:

OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + frmMain.strFilePath + "\\ConfigStructure.mdb"); 
myConnection.Open(); 
string strTemp = " [KEY] Text, [VALUE] Text "; 
OleDbCommand myCommand = new OleDbCommand(); 
myCommand.Connection = myConnection; 
myCommand.CommandText = "CREATE TABLE [table1](" + strTemp + ")"; 
myCommand.ExecuteNonQuery(); 
myCommand.Connection.Close(); 

完璧に動作します。

関連する問題