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 = newADODB.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