Microsoft Accessデータベースファイルがまだ存在しない場合、C#でどのように作成しますか?
最も簡単な答えは、空の.mdb
/.accdb
ファイルをプログラムに埋め込み、それをディスクに書き込むことです。
正解は、ADOXライブラリでCOM相互運用機能を使用することです。
var cat = new ADOX.Catalog()
cat.Create(connectionString);
OleDbConnectionStringBuilder
を使用して接続文字列を生成することを忘れないでください。
試してください:
using ADOX; //Requires Microsoft ADO Ext. 2.8 for DDL and Security
using ADODB;
public bool CreateNewAccessDatabase(string fileName)
{
bool result = false;
ADOX.Catalog cat = new ADOX.Catalog();
ADOX.Table table = new ADOX.Table();
//Create the table and it's fields.
table.Name = "Table1";
table.Columns.Append("Field1");
table.Columns.Append("Field2");
try
{
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + "; Jet OLEDB:Engine Type=5");
cat.Tables.Append(table);
//Now Close the database
ADODB.Connection con = cat.ActiveConnection as ADODB.Connection;
if (con != null)
con.Close();
result = true;
}
catch (Exception ex)
{
result = false;
}
cat = null;
return result;
}
http://zamirsblog.blogspot.com/2010/11/creating-access-database.html
私のコンピューター、Windows 7 sp1 Professional 64ビットでは、Microsoft ADO Ext。2.8 for DDL and Security forC:\ Program Files\Common Files\System\ado\msadox28.dll。
それは参照としても見つかります:
[〜#〜] adox [〜#〜]として参照に含まれています
デフォルトでは、列はtext [255]として作成されます。以下は、さまざまなデータ型として列を作成するいくつかの例です。
table.Columns.Append("PartNumber", ADOX.DataTypeEnum.adVarWChar, 6); // text[6]
table.Columns.Append("AnInteger", ADOX.DataTypeEnum.adInteger); // Integer
アクセスデータベースフィールドを作成および読み取るためのこのデータ型のリストを見つけました
Access Text = adVarWChar
アクセスメモ= adLongVarWChar
アクセス数値バイト= adUnsignedTinyInt
Access Numeric Integer = adSmallInt
Access Numeric Long Integer = adInteger
数値の単精度へのアクセス= adSingle
数値の倍精度へのアクセス= adDouble
数値レプリカアクセスID = adGuid
Access Numeric Decimal = adNumeric
アクセス日/時間= adDate
アクセス通貨= adCurrency
オートナンバーへのアクセス= adInteger
アクセスはい/いいえ= adBoolean
HyperLinkにアクセス= adLongVarWChar
DAO/ACEライブラリの CreateDatabase メソッドを使用できます(Officeと共にインストールされるか、または here からダウンロードできます)。
// using Microsoft.Office.Interop.Access.Dao;
// using static Microsoft.Office.Interop.Access.Dao.DatabaseTypeEnum;
const string dbLangGeneral = ";LANGID=0x0409;CP=1252;COUNTRY=0";
var engine = new DBEngine();
var dbs = engine.CreateDatabase(@"c:\path\to\database.accdb", dbLangGeneral, dbVersion120);
dbs.Close();
dbs = null;
データベースでサポートするAccess/Jetのバージョンによっては、DatabaseTypeEnum
enumの他の値を使用できることに注意してください。
dbVersion10
dbVersion11
dbVersion20
dbVersion30
dbVersion40
dbVersion120
dbVersion140
dbVersion150
また、データベースを暗号化するか、別の照合順序を選択することもできます。
注意:64ビットマシンで64ビットプログラムの一部としてコードを実行する場合は、64ビットバージョンのエンジンが必要です。 32ビットバージョンが既にインストールされている場合(Officeまたはダウンロード経由)、/passive
フラグと/silent
フラグを使用して64ビットインストーラーを実行する必要があります。そうしないと、以前にインストールされた32ビットコンポーネントの上に64ビットコンポーネントをインストールできないというメッセージが表示されます。