在.NET 2.0框架下動態創建Access數據庫和表時的注意事項

在以前的文章《如何在.NET框架下創建Access數據庫和表?》中提供的方法,在.NET 2.0下無效,所有的字段類型都變成了文本類型,不知道微軟改變了什麼東西。提醒大家注意,需要加ADOX.ColumnClass.Type = DataTypeEnum.adLongVarBinary屬性。下面將修正後的代碼發佈如下。

C#: 

<%@ Page Language="C#" %>

<%@ Import Namespace="ADOX" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
  
/// <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();
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  
<title>在.NET框架下動態創建Access數據庫和表</title>
</head>
<body>
  
<form id="form1" runat="server">
    
<asp:Label ID="msg" runat="server" />
  
</form>
</body>
</html>
VB.NET:
<%@ Page Language="VB" %>

<%@ Import Namespace="ADOX" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim dbName As String 
= "D:NewMDB" + DateTime.Now.Millisecond.ToString + ".mdb"
    Dim cat As ADOX.CatalogClass 
= New ADOX.CatalogClass
    cat.Create(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";")
    Response.Write(
"數據庫:" + dbName + "已經創建成功!")
    Dim tbl As ADOX.TableClass 
= New ADOX.TableClass
    tbl.ParentCatalog 
= cat
    tbl.Name 
= "MyTable"
    Dim col As ADOX.ColumnClass 
= 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)
    Dim col2 As ADOX.ColumnClass 
= 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)
    Dim col3 As ADOX.ColumnClass 
= 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)
    Dim col4 As ADOX.ColumnClass 
= New ADOX.ColumnClass
    col4.ParentCatalog 
= cat
    col4.Name 
= "Ole類型"
    col4.Type 
= DataTypeEnum.adLongVarBinary
    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 
= Nothing
    cat 
= Nothing
    GC.WaitForPendingFinalizers()
    GC.Collect()
  End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  
<title>在.NET框架下動態創建Access數據庫和表</title>
</head>
<body>
  
<form id="form1" runat="server">
    
<asp:Label ID="msg" runat="server" />
  
</form>
</body>
</html>

更多內容請到www.05yl.cn


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章