日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp.net 2.0下用access开发的时候要注意的问题

發布時間:2024/4/15 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net 2.0下用access开发的时候要注意的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:http://www.study-code.com/dotnet/aspnet/67492.htm

?

1、數據庫要給訪問權限,在我的電腦里,右擊access數據庫,點擊“屬性”菜單,選“安全”選項卡,選擇Users組,賦給完全控制的權限

  如果沒有安全選項卡,點擊菜單“工具”->“文件夾選項”,進入“查看”選項卡,把“使用簡單文件共享”前的勾去掉

2、連接數據庫的時候,如果想要做到可以隨時更改數據庫的名稱,也不用重新編譯網站,就把數據庫的路徑記錄在web.config文件里:

??? <connectionStrings>
????? <add name="aceConnectionString" connectionString="目錄\\數據庫名稱.mdb" providerName="System.Data.OleDb" />
??? </connectionStrings>
  使用這兩個方法取值:

public static string connectString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + HttpContext.Current.Server.MapPath(ConfigurationManager.ConnectionStrings["aceConnectionString"].ConnectionString);

  public static string GetDB()
??? {
??????? return HttpContext.Current.Server.MapPath(ConfigurationManager.ConnectionStrings["aceConnectionString"].ConnectionString);
??? }

在每個頁面,如果用到AccessDataSource控件,這個控件是不會自己讀取這個值的,可以在Page_Load頁面里,使用AdsAd.DataFile = NnllClass.GetDB();給他賦值

protected void Page_Load(object sender, EventArgs e)
??? {
??????? AdsAd.DataFile = NnllClass.GetDB();
??? }
3、如果使用AccessDataSource添加、刪除、修改記錄,要注意參數的問題,有一些網站,對一些參數報錯的信息,給出的答案說access數據庫應該使用拼接的sql語句,不可以使用參數,這種說法是不對的,access數據庫也可以使用參數傳遞的方式增刪改查數據庫的

就是,因為vs.net 2005不可以像使用ms sql時一樣子,自動會檢索出參數,所以全部參數要自己手動添加,在添加參數的時候,要很小心,不要少了,也不要多了,也不要搞亂了順序

發現AccessDataSource控件,好像是根據綁定字段的順序來對應傳入的參數的,也就是說,如果你在FormView里,是這樣子綁定的:

<asp:TextBox ID="myField1TextBox" runat="server" Text='<%# Bind("myField1") %>' MaxLength="20"></asp:TextBox>
<asp:TextBox ID="myField2TextBox" runat="server" Text='<%# Bind("myField2") %>' MaxLength="20"></asp:TextBox>
定義參數的時候,就應該這樣子定義:

?<InsertParameters>
??????????? <asp:Parameter Name="myField1" Type="String" Size="20" ConvertEmptyStringToNull="False" />
??????????? <asp:Parameter Name="myField2" Type="String" Size="20" ConvertEmptyStringToNull="False" />
??????? </InsertParameters>
次序不要搞亂了,搞亂了數據格式不同時,會報錯,具體的出錯信息我忘記了

定義參數的時候,還有一個要注意的問題就是,參數名不要寫錯,參數不要寫漏

使用sql數據庫時,參數名不對,或者參數個數不對,都會得到很明顯的出錯信息,就是,access數據庫,在這種時候,是不報錯的,如果參數名寫錯了,只會說有n個參數沒有值,如果是寫漏了參數,他有時候會直接替你更新數據庫,而更新的時候,是以綁定的順序來對應參數的值的,這時候,如果后面的參數值,大于前面的參數對應的字段大小,就會得到“字段太小”的出錯信息

?

<InsertParameters>
??????????? <asp:Parameter Name="myField1" Type="String" Size="20" ConvertEmptyStringToNull="False" />
??????????? <asp:Parameter Name="myField2" Type="String" Size="20" ConvertEmptyStringToNull="False" />
??????? </InsertParameters>
如果少了一個

??????????? <asp:Parameter Name="myField3" Type="String" Size="200" ConvertEmptyStringToNull="False" />
在更新的時候,會把myField3的值,寫進myField2里,如果myField3的值的長度大于20,就會報“字段太小”了

3、如果不習慣AccessDataSource控件,那就自己綁定數據吧,給出一些方法:

#region 返回數據庫地址
??? public static string GetDB()
??? {
??????? return HttpContext.Current.Server.MapPath(ConfigurationManager.ConnectionStrings["aceConnectionString"].ConnectionString);
??? }
??? #endregion
???

#region 打開數據庫:SqlConnection OpenConnect()
??? public OleDbConnection OpenConnect(Page aPage,bool setMsg)
??? {
??????? try
??????? {
??????????? OleDbConnection dbConnect = new OleDbConnection(connectString);
??????????? if (!dbConnect.State.Equals(ConnectionState.Open))
??????????? {
??????????????? dbConnect.Open();
??????????? }
??????????? return dbConnect;
??????? }
??????? catch (OleDbException ex)
??????? {
??????????? if (setMsg)
??????????? {
??????????????? SetMsgJS(aPage.Master, "連接數據庫失敗:" + ex.Message.Replace("\n", "").Replace("\r", ""));
??????????? }
??????????? return null;
??????? }
??? }
??? #endregion
???

#region 關閉數據庫:void CloseConnect(SqlConnection dbConnect)
??? public void CloseConnect(OleDbConnection dbConnect)
??? {
??????? if (dbConnect.State.Equals(ConnectionState.Open))
??????? {
??????????? dbConnect.Close();
??????? }
??? }
??? #endregion
???

#region 讀取數據,返回DataSet
??? public DataSet GetDataSet(Page aPage, OleDbConnection dbConnection, CommandType commandType, string commandText, out string msg, bool setMsg)
??? {
??????? msg = "";

??????? //創建并設置SqlCommand
??????? OleDbCommand dbCommand = new OleDbCommand();
??????? dbCommand.Connection = dbConnection;
??????? dbCommand.CommandType = commandType;
??????? dbCommand.CommandText = commandText;
??????? //創建SqlDataAdapter并獲取數據
??????? DataSet ds = new DataSet();
??????? try
??????? {
??????????? OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);
??????????? dataAdapter.Fill(ds);
??????? }
??????? catch (InvalidOperationException eo)
??????? {
??????????? msg = "讀取數據失敗:" + eo.Message.Replace("\n", "").Replace("\r", "") + "\\n";
??????????? if (setMsg)
??????????? {
??????????????? SetMsgJS(aPage.Master, msg);
??????????? }
??????? }
??????? catch (OleDbException ex)
??????? {
??????????? msg = "讀取數據失敗:" + ex.Message.Replace("\n", "").Replace("\r", "") + "\\n";
??????????? if (setMsg)
??????????? {
??????????????? SetMsgJS(aPage.Master, msg);
??????????? }
??????? }

??????? //返回數據
??????? return ds;
??? }
??? #endregion

???

#region 讀取數據,返回SqlDataReader
??? public OleDbDataReader GetDataReader(Page aPage, OleDbConnection dbConnection, CommandType commandType, string commandText, OleDbParameter[] p, out string msg, bool setMsg)
??? {
??????? msg = "";
??????? //設置命令
??????? OleDbCommand dbCommand = new OleDbCommand();
??????? dbCommand.Connection = dbConnection;
??????? dbCommand.CommandType = commandType;
??????? dbCommand.CommandText = commandText;
??????? //設置參數
??????? if (p != null)
??????? {
??????????? foreach (OleDbParameter pi in p)
??????????? {
??????????????? dbCommand.Parameters.Add(pi);
??????????? }
??????? }
??????? //讀取第一個結果集
??????? OleDbDataReader dbReader = null;
??????? try
??????? {
??????????? dbReader = dbCommand.ExecuteReader();
??????? }
??????? catch (InvalidOperationException eo)
??????? {
??????????? msg = "讀取數據失敗:" + eo.Message.Replace("\n", "").Replace("\r", "") + "\\n";
??????????? if (setMsg)
??????????? {
??????????????? SetMsgJS(aPage.Master, msg);
??????????? }
??????? }
??????? catch (OleDbException ex)
??????? {
??????????? msg = "讀取數據失敗:" + ex.Message.Replace("\n", "").Replace("\r", "") + "\\n";
??????????? if (setMsg)
??????????? {
??????????????? SetMsgJS(aPage.Master, msg);
??????????? }
??????? }
??????? return dbReader;
??? }
??? #endregion
???

#region 執行sql命令或存儲過程
??? public int execCommand(Page aPage, OleDbConnection dbConnection, CommandType commandType, string commandText, OleDbParameter[] p, out string msg, bool setMsg)
??? {
??????? bool needCloseDB = false;
??????? int row = 0;
??????? msg = "";
??????? //創建并設置SqlConnection
??????? if (dbConnection == null)
??????? {
??????????? needCloseDB = true;
??????????? dbConnection = OpenConnect(aPage, setMsg);
??????????? if (dbConnection == null) return -1;
??????? }
??????? //創建并設置SqlCommand
??????? OleDbCommand dbCommand = new OleDbCommand();
??????? dbCommand.Connection = dbConnection;
??????? dbCommand.CommandType = commandType;
??????? dbCommand.CommandText = commandText;
??????? //設置參數
??????? if (p != null)
??????? {
??????????? foreach (OleDbParameter pi in p)
??????????? {
??????????????? dbCommand.Parameters.Add(pi);
??????????? }
??????? }
??????? //執行命令
??????? try
??????? {
??????????? row = dbCommand.ExecuteNonQuery();
??????? }
??????? catch (InvalidOperationException eo)
??????? {
??????????? msg = eo.Message.Replace("\n", "").Replace("\r", "") + "\\n";
??????????? if (setMsg)
??????????? {
??????????????? SetMsgJS(aPage.Master, msg);
??????????? }
??????????? row = -1;
??????? }
??????? catch (OleDbException ex)
??????? {
??????????? //執行過程出錯
??????????? msg = ex.Message.Replace("\n", "").Replace("\r", "") + "\\n";
??????????? if (setMsg)
??????????? {
??????????????? SetMsgJS(aPage.Master, msg);
??????????? }
??????????? row = -1;
??????? }
??????? //關閉數據庫
??????? if (needCloseDB)
??????? {
??????????? CloseConnect(dbConnection);
??????? }
??????? return row;
??? }
??? #endregion
上面的方法都用到一個SetMsgJS方法,這個方法是用來給母版頁設置信息的


public static void SetMsgJS(MasterPage masterPage, string msg)
??? {
??????? Literal lt = (Literal)masterPage.FindControl("LiteralMsg");
??????? if (lt != null)
??????? {
??????????? lt.Text += msg;
??????? }
??? }
在母版頁里定義是這樣子的:
???

<script type="text/javascript">
??????? var msg = "";
??????? msg = "<asp:Literal ID="LiteralMsg" runat="server"></asp:Literal>";
??????? if(msg != "")
??????? {
??????????? alert(msg);
??????? }
??? </script>

轉載于:https://www.cnblogs.com/kangshifu/archive/2008/08/11/1265124.html

總結

以上是生活随笔為你收集整理的asp.net 2.0下用access开发的时候要注意的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。