1. 程式人生 > 其它 >C# 建立表ACCESS表,新增修改欄位

C# 建立表ACCESS表,新增修改欄位

最開始以為access 修改欄位資訊,用ALTER TABLE 語句就可以了,

開啟access 檔案執行了

ALTER TABLE user ALTER COLUMN address TEXT(10)

發現可以執行,於是乎,就用C#連結 資料庫OleDbConnection,OleDbCommand 去執行,可是字串一模一樣。 就是執行報錯提示ALTER TABLE 語法錯誤.

http://www.accessoft.com/article-show.asp?id=929

https://support.microsoft.com/zh-cn/office/alter-table-%E8%AF%AD%E5%8F%A5-81d241e3-1522-4103-acf0-9857888d581c

既然說用DAO create方法。

============================================================

C#操作Access資料庫(建立&修改結構)

想要在程式中控制Access,不是資料,而是Access資料庫的表結構啊,欄位啊..就要用到ADOX


所以先要在解決方案中引用之,方法如下:
解決方案資源管理器 --> 引用 --> (右鍵)新增引用 --> COM -->Microsoft ADO Ext. 2.8 for DDL and Security

注意:

當建立ACCESS資料庫的時候,會自動建立一個連線,為了釋放.ldb檔案,必須關閉這一連線。而這個連線是ADODB類的,所以很多人一直都找不到釋放連線的方法。

方法如下: 引用 --> (右鍵)新增引用 --> COM -->Microsoft ActiveX Data Objects 2.8 Library

有了這個兩個COM元件後,就可以開始一系列操作啦。。。

一.建立Access資料庫

string dbName = "E:\\Temp\\" + DateTime.Now.Millisecond.ToString() + ".mdb";//注意副檔名必須為mdb,否則不能插入表
ADOX.CatalogClass cat = new ADOX.CatalogClass();
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";");

二.建立連線使用已有資料表

        ADODB.Connection conn = new
ADODB.Connection(); conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB/MarketDB.mdb", null, null, -1); ADOX.Catalog catalog = new ADOX.Catalog(); catalog.ActiveConnection = conn; ADOX.Table table = catalog.Tables["user"];

三.建立一個數據表

ADOX.TableClass tbl = new ADOX.TableClass();
tbl.ParentCatalog = cat;
tbl.Name = "MyTable";

四.增加一個自動增長的欄位

ADOX.ColumnClass col = new ADOX.ColumnClass();
col.ParentCatalog = cat;
col.Type = ADOX.DataTypeEnum.adInteger; //必須先設定欄位型別
col.Name = "id";
col.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
col.Properties["AutoIncrement"].Value = true;
tbl.Columns.Append(col, ADOX.DataTypeEnum.adInteger, 0);

五.增加一個文字欄位

ADOX.ColumnClass col2 = new ADOX.ColumnClass();
col2.ParentCatalog = cat;
col2.Name = "Description";
col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
tbl.Columns.Append(col2, ADOX.DataTypeEnum.adVarChar, 25);

下面的這句很重要哦:

cat.Tables.Append(tbl); //把表加入資料庫(非常重要)

六:關閉

//轉換為ADO連線,並關閉
(cat.ActiveConnection as ADODB.Connection).Close();
cat.ActiveConnection = null;
cat = null;

附件:程式碼

/// <summary> 
   /// CreateAccessDB 的摘要說明。 
   /// 對於不同版本的ADO,需要新增不同的引用 
   /// 請新增引用Microsoft ADO Ext. 2.7 for DDL and Security 
   /// 請新增引用Microsoft ADO Ext. 2.8 for DDL and Security 
   /// </summary> 
   
   protected void Page_Load(object sender, EventArgs e) 
   { 
   //為了方便測試,資料庫名字採用比較隨機的名字,以防止新增不成功時還需要重新啟動IIS來刪除資料庫。 
   string dbName = "D:\\NewMDB" + DateTime.Now.Millisecond.ToString() + ".mdb"; 
   ADOX.CatalogClass cat = new ADOX.CatalogClass(); 
   cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";"); 
   Response.Write("資料庫:" + dbName + "已經建立成功!"); 
   ADOX.TableClass tbl = new ADOX.TableClass(); 
   tbl.ParentCatalog = cat; 
   tbl.Name = "MyTable"; 
   
   //增加一個自動增長的欄位 
   ADOX.ColumnClass col = new ADOX.ColumnClass(); 
   col.ParentCatalog = cat; 
   col.Type = ADOX.DataTypeEnum.adInteger; // 必須先設定欄位型別 
   col.Name = "id"; 
   col.Properties["Jet OLEDB:Allow Zero Length"].Value = false; 
   col.Properties["AutoIncrement"].Value = true; 
   tbl.Columns.Append(col, ADOX.DataTypeEnum.adInteger, 0); 
   
   //增加一個文字欄位 
   ADOX.ColumnClass col2 = new ADOX.ColumnClass(); 
   col2.ParentCatalog = cat; 
   col2.Name = "Description"; 
   col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false; 
   tbl.Columns.Append(col2, ADOX.DataTypeEnum.adVarChar, 25); 
   
   //增加數字欄位 
   ADOX.ColumnClass col3 = new ADOX.ColumnClass(); 
   col3.ParentCatalog = cat; 
   col3.Name = "數字"; 
   col3.Type = DataTypeEnum.adDouble; 
   col3.Properties["Jet OLEDB:Allow Zero Length"].Value = false; 
   tbl.Columns.Append(col3, ADOX.DataTypeEnum.adDouble, 666); 
   
   //增加Ole欄位 
   ADOX.ColumnClass col4 = new ADOX.ColumnClass(); 
   col4.ParentCatalog = cat; 
   col4.Name = "Ole型別"; 
   col4.Type = DataTypeEnum.adLongVarBinary; 
   col4.Properties["Jet OLEDB:Allow Zero Length"].Value = false; 
   tbl.Columns.Append(col4, ADOX.DataTypeEnum.adLongVarBinary, 0); 
   
   
   //設定主鍵 
   tbl.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "id", "", ""); 
   cat.Tables.Append(tbl); 
   
   msg.Text = ("<br>資料庫表:" + tbl.Name + "已經建立成功!"); 
   
   System.Runtime.InteropServices.Marshal.ReleaseComObject(tbl); 
   System.Runtime.InteropServices.Marshal.ReleaseComObject(cat); 
   tbl = null; 
   cat = null; 
   GC.WaitForPendingFinalizers(); 
   GC.Collect(); 
   } 

轉:https://blog.csdn.net/xiatiancc/article/details/80405232

https://www.cnblogs.com/lanyubaicl/p/10102032.html

https://blog.csdn.net/hit_why/article/details/53435984