Ⅰ ControlDate如何綁定數據
VB實現sql Server 2000存儲過程調用
存儲過程是存儲在伺服器上的一組預編譯的Transact-SQL語句,是一種封裝重復任務操作的方法,支持用戶提供的變數,具有強大的編程功能。它類似於DOS系統中的BAT文件。在BAT文件中,可以包含一組經常執行的命令,這組命令通過BAT文件的執行而被執行。同樣的道理,可以把要完成某項任務的許多Transact-SQL語句寫在一起,組織成存儲過程的形式,通過執行該存儲過程就可以完成這項任務。存儲過程與BAT文件又有差別,即存儲過程已經進行了預編譯。
1、創建存儲過程的方法 在Transact-SQL語言中,創建存儲過程可以使用CREATE PROCEDURE語句,其語法形式如下:
CREATE PROC[EDURE] procere_name[;number]
[{@parameter data_type}[VARYING][=default][OUTPUT]
]],…n]
[WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS
sql_statement[…n] 在上面的CREATE PROCEDURE語句中,方括弧"[
]"中的內容是可選的,花括弧"{}"中的內容是必須出現的,不能省略,[,…n]表示前面的參數樣式,可以重復出現。豎線"|"表示兩邊的選項可以任選一個。
下面分析該語句中各種選項的含義。 CREATE PROCEDURE是關鍵字,也可以寫成CREATE PROC。
procere_name是該存儲過程的名稱,名稱可以是任何符合命名規則的標示符。名稱後的[;number]參數表示可以定義一系列的存儲過程名稱,這些存儲過程的數量由number指定。
參數名稱可以使用@parameter
data_type來指定。在Transact-SQL語言中,用戶定義的參數名稱前面加"@"符號,這些數據類型是Transact-SQL語言允許的各種數據類型,包括系統提供的數據類型和用戶定義的數據類型。
當參數類型為cursor時,必須使用關鍵字VARYING和OUTPUT。VARYING表示結果集可以是一個輸出參數,其內容是動態的。該關鍵字只能在使用游標作為數據類型時使用。關鍵字OUTPUT表示這是一個輸出參數,可以把存儲過程執行的結果信息返回應用程序。
default用於指定參數的默認值。
RECOMPILE選項表示重新編譯該存儲過程。該選項只是在需要的時候才使用,例如經常需要改變資料庫模式時。
ENCRYPTION選項用來加密創建存儲過程的文本,防止他人查看。 選項FOR
REPLICATION主要用於復制過程中。注意,該選項不能和選項RECOMPILE同時使用。
AS是一個關鍵字,表示其後的內容是存儲過程的語句。參數sql-statement[…n]表示在一個存儲過程中可以包含多個Transact-SQL語句。
2、存儲過程的優點 在頻繁訪問資料庫的系統中,開發者都樂於使用存儲過程,這與存儲過程的下列優點是分不開的。 ⑴
存儲過程可以與其他應用程序共享應用程序的邏輯,從而確保一致的數據訪問和操縱。 ⑵
存儲過程提供了一種安全機制。如果用戶被授予執行存儲過程許可權,那麼即使該用戶沒有訪問在執行該存儲過程中所參考的表或視圖的許可權,該用戶也可以完全執行該存儲過程而不受到影響。因此,可以創建存儲過程來完成所有的增加、刪除等操作,並且可以通過編程式控制制上述操作中對信息的訪問許可權。
⑶
存儲過程執行速度快,便於提高系統的性能。由於存儲過程在第一次執行之後,其執行規劃就駐存在過程高速緩沖存儲區中,在以後的操作中,只需從過程高速緩沖存儲區中調用編譯好的二進制形式存儲過程來執行。
⑷
使用存儲過程可以減少網路傳輸時間。如果有一千條Transact-SQL語句的命令,一條一條地通過網路在客戶機和伺服器之間傳送,那麼這種傳輸所耗費的時間將很長。但是,如果把這一千條Transact-SQL語句的命令寫成一條較為復雜的存儲過程命令,這時在客戶機和伺服器之間網路傳輸所需的時間就會大大減少。
SQL Server 2000資料庫存儲過程的調用
VB作為當今應用極為普遍的資料庫客戶端開發工具之一,對客戶端應用程序調用伺服器端存儲過程提供了強大的支持。特別是隨著VB6.0的推出,VB客戶端應用程序可以方便地利用ADO的對象和集合來實現對資料庫存儲過程的調用。
在筆者編寫的科技檔案管理系統中,就是採用VB作為開發平台,採用SQL
Server2000資料庫管理數據,在這個科技檔案管理系統中有海量的數據,並且對資料庫有頻繁的訪問,利用存儲過程訪問資料庫節省了執行時間,大大提高了系統的性能。
1、ADO簡介 ADO控制項(也稱為ADO Data控制項)與VB固有的Data控制項相似。使用ADO Data控制項,可以利用Microsoft
ActiveX Data Objects(ADO)快速建立資料庫綁定控制項和數據提供者之間的連接。 ADO Data控制項可以實現以下功能:
·連接一個本地資料庫或遠程資料庫。
·打開一個指定的資料庫表,或定義一個基於結構化查詢語言(SQL)的查詢、存儲過程或該資料庫中的表的視圖的記錄集合。
·將數據欄位的數值傳遞給數據綁定控制項,可以在這些控制項中顯示或更改這些數值。 ·添加新的記錄,或根據更改顯示在綁定的控制項中的數據來更新一個資料庫。
2、資料庫的連接 資料庫的連接可通過ADO控制項實現,為此,必須在工程部件中選擇Microsoft ADO Data Control 6.0
(OLEDB),然後在窗體中添加ADO控制項。利用ADO連接資料庫有兩種方法,具體如下。 1) 通過ADODC屬性頁實現連接
在ADODC屬性頁中選擇生成按鈕,進入數據鏈接屬性對話框;然後選擇該對話框中的連接屬性頁,選擇或輸入伺服器名稱和資料庫等重要信息;最後測試連接,連接成功後,按確定按鈕,返回到屬性頁對話框,可獲得連接字元串,如下例:
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial
Catalog=Science_File;Data Source=Data_Server
其中sa是用戶名;Science_File是資料庫名;Data_Server是資料庫名。 通過下列語句,即可連接到指定的資料庫:
dim odbcstr as String, adocon As New ADODB.Connection
odbcstr
= "Provider=SQLOLEDB.1;Persist Security Info=False;User
ID=sa;Initial Catalog=Science_File;Data Source=Data_Server"
adocon.Open odbcstr '連接到資料庫 2) 直接使用連接語句實現 連接資料庫的語句如下:
Dim ado as ADODC
ado.ConnectionString
= "Provider=SQLOLEDB.1;Password=" & User_Pwd
& ";Persist Security Info=True;User ID="
& User_Name & ";Initial Catalog="
& Data_Name & ";Data Source="
& server_name
其中User-Pwd是用戶密碼;User_Name是用戶名;Data_Name是資料庫名;server_name是伺服器名。
連接資料庫成功後就可以調用存儲過程執行操作。 3、存儲過程的調用
假設有一個名為doc_ProcName存儲過程,該存儲過程有一個輸入參數,一個輸出參數。 1) 直接傳遞參數調用存儲過程
直接傳遞參數方法主要通過以下幾個步驟來實現: (1) 通過ADODB的Connection對象打開與數據源的連接; (2)
通過ActiveConnection指定Command對象當前所屬的Connection對象; (3)
通過CommandText屬性設置Command對象的源,即要調用的存儲過程; (4)
通過CommandType屬性確定Command對象的源類型,如果源類型為存儲過程CommandType即為adCmdStoredProc;
(5)
通過Command對象的Parameters集合向所調用的存儲過程傳遞參數,其中對象Parameters(0)為執行存儲過程的返回值,返回值為0則執行存儲過程成功;
(6) 通過Eexecute方法執行在 CommandText 屬性中指定的存儲過程。 以存儲過程doc_ProcName為例,關鍵代碼如下:
Dim strS As String '定義一變數
Dim adoconn As New ADODB.Connection 'Connection 對象代表了打開與數據源的連接。
Dim adocomm As New ADODB.Command 'Command 對象定義了將對數據源執行的指定命令。
Dim ReturnValue As Integer '調用存儲過程的返回值
adoconn.ConnectionString = Adodc1.ConnectionString 'Adodc1為窗體中的ADO控制項,並已成功連接資料庫
adoconn.Open
Set adocomm.ActiveConnection = adoconn '指示指定的 Command對象當前所屬的 Connection對象。
adocomm.CommandText = "doc_ProcName" '設置Command對象源。
adocomm.CommandType = adCmdStoredProc '通知提供者CommandText屬性有什麼,它可能包括Command對象的源類型。設置這個屬性優化了該命令的執行。
adocomm.Parameters(1) = "1"
adocomm.Parameters(2) = "OutputParameters" 'OutputParameters可以為任意的字元串或數字
adocomm.Execute
ReturnValue = adocomm.Parameters(0) '存儲過程的返回值,返回0則成功執行。
strS = adocomm.Parameters(2) '把存儲過程的輸出參數的值賦給變數strS 2) 追加參數法調用存儲過程 追加參數通過CreateParameter方法,用來指定屬性創建新的Parameter對象。具體語法如下:
Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value) ·Name 可選,字元串,代表 Parameter 對象名稱。
·Type 可選,長整型值,指定 Parameter 對象數據類型。
·Direction 可選,長整型值,指定 Parameter 對象類型。
·Size 可選,長整型值,指定參數值最大長度(以字元或位元組數為單位)。
·Value
可選,變體型,指定 Parameter 對象值。
這種方法與上面一種方法的分別主要在於,追加參數的方法在向存儲過程傳遞參數時,這種方法首先通過CreateParameter方法為存儲過程創建參數,然後通過Append方法將創建的參數追加到Parameters集合中去。
仍然以存儲過程doc_ProcName的調用為例,關鍵代碼如下:
Dim mRst As ADODB.Recordset 'Recordset 對象表示的是來自基本表或命令執行結果的記錄全集。
Dim prm As ADODB.Parameter 'Parameter 對象代表參數或與基於參數化查詢或存儲過程的Command 對象相關聯的參數。
adoconn.ConnectionString = Adodc1.ConnectionString
adoconn.Open
Set adocomm.ActiveConnection = adoconn
adocomm.CommandText = "doc_ProcName"
adocomm.CommandType = adCmdStoredProc
Set prm = adocomm.CreateParameter("parameter1", adTinyInt, adParamInput, , "1")
adocomm.Parameters.Append prm
Set prm = adocomm.CreateParameter("parameter2", adInteger, adParamOutput)
adocomm.Parameters.Append prm
Set mRst = adocomm.Execute
ReturnValue = adocomm.Parameters(0)
Ⅱ 數據訪問層常見的方法有哪幾種
一、響應重定向方法
響應重定向方法是目前為止將一個網頁重定向到另一個網頁的最簡單的方法的最簡單的方法。當Web伺服器接到一個重定向請求後,它會將一個響應頭送給客戶端,這將導致客戶端發送一個新的請求到伺服器。按句話說,一個重定向請求實際上是兩個請求響應:一個是最初的請求響應,另一個是新的重定向請求響應。
在ASP.NET中實現重定向很容易。下面的代碼演示了如何使用Response.Redirect方法實現網頁重定向:
protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx");
}
要注意的是重定向請求只是一個GET請求,這就意味著我們不能從源頁中通過重定向命令提交數據。但是我們可以在重定向中使用查詢字元串來傳遞數據。如下面代碼所示:
protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx?userName=" + UserName.Text));
}
上面的例子將一個查詢字元串作為參數傳遞給了Response.Redirect方法的目標URL。我們可以通過如下的代碼獲得源數據。
protected void Page_Load(object sender, EventArgs e)
{
string userName = Request["userName"];
}
二、伺服器傳輸方法
和依賴於客戶端向另一個新頁發請求不同,伺服器傳輸是一種伺服器重定向技術,這種技術通過簡單的改變Web伺服器所處理的代碼來達到請求一個新頁的目的。當被請求頁和源頁面在同一個伺服器時,伺服器傳輸要比 Response.Redirect方法更有效,這是由於這種技術可以避免額外的開銷,僅僅使用伺服器的資源就可以進行重定向。要注意的這種技術有一個副作用,在頁面進行重定向時,客戶端的URL仍然會保持源頁面的URL,這可能會使客戶認為他們所獲得的數據是源頁面產生的。當然,在大多數情況下,這不是問題,但是這將使調試變得更困難。
Server.Transfer方法還可以保存初始頁的 HttpContext。因此,目標頁可以訪問源頁面的值。我們可以使用FormsCollection屬性來從目標頁面中獲得源頁面的值。首先,要確定我們使用了被重載的方法,這個方法有兩個參數:目標URL和一個Boolean類型的值,告訴伺服器是否保存用於描述源頁面值的Form。如下面的代碼所示:
Server.Transfer("Menu.aspx",true);
然後,我們在目標頁面中獲得一個叫txtUserName的Textbox控制項的值的代碼如下:
object obj = Request.Form["txtUserName"];
三、Response.Redirect和Server.Transfer的比較
由於Response.Redirect方法要進行兩次請求響應操作,因此,我們應該在對性能要求高的網站盡量避免使用這種方法。然而,只從技術上說,使用redirect方式確實可以從一個網頁跳到另一個網頁。相比之下,Server.Transfer會更有效率,但是跳轉的范圍僅限於同一個Web伺服器的不同網頁。從本質上說,我們可以使用 Server.Transfer來消除不必要的請求響應操作。如果我們需要重定位到不同伺服器的網頁,就需要使用Response.Redirect方法。
四、跨頁提交概述
在ASP.NET 2.0中,我們可以通過實現IbuttonControl介面提交給不同的WebForm,來實現跨網頁的提交。和Response.Redirect類似,跨網頁提交是一個基於客戶端的傳輸機制,但也有點象Server.Transfer,目標網頁也可以訪問源網頁的數據。為了使用跨網頁提交,我們需要在源網頁中的PostBackUrl屬性中指定目標URL。
五、實現跨網頁提交
這部分將討論一下如何在ASP.NET2.0中實現跨網頁提交。為了開始我們的學習,假設有兩個Web頁,一個是源Web頁,另一個是目標Web頁。在源網頁中初始化了使用按鈕進行的跨網頁提交操作。我們首先必須設置目標網頁按鈕的PostBackUrl屬性,順便說一句,所有實現了System.Web.UI.WebControls.IbuttonControl介面的Web控制項都有跨網頁提交的特性。下面的代碼將演示這一過程。
PostBackUrl="~/target.aspx" text = "Post to a target page"/>
當我們設置PostBackUrl屬性時,ASP.NET框架將相應的控制項綁定到一個新的叫WebForm_DoPostBackWithOptions的JavaScript函數,產生的Html代碼如下:
onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("btnSubmit", "", false, "","Target.aspx", false, false))" id="btnSubmit" />
對於上面的html代碼來說,當用戶單擊按鈕時,瀏覽器將提交目標URL(Target.aspx),而不是源URL。
六、從目標頁面中獲得源頁面控制項的值
ASP.NET2.0提供了一個叫PreviousPage的新的屬性,這個屬性無論在何時當前頁面進行跨網頁提交操作時都會指向源頁面。要注意的是,當源頁面和目標頁面在不同的應用程序中時,這個屬性包含null(這個null並不是未初始化的意思)。還有要注意的是當目標網頁訪問PreviousPage屬性時可以獲得源頁面的數據,ASP.NET運行時裝載並執行了源頁面。這將引發ProcessChildRequest事件的發生。而且,它還會引發Page_Init事件、Page_Load和任何其他的源頁面按鈕單擊事件。
因此,我們要避免由於不小心進行誤操作,所以最好通過 IsCrossPostBack屬性來確認是否為一個跨網頁提交發生,如果這個屬性值為true,那麼目標網頁就是通過一個跨網頁提交動作而調用的。如果是通過另外一種方式調用的(如一般的請求、Response.Redirect或是一個Server.Transfer),這個屬性的值為false。下面的例子演示了如何使用這個屬性。
if ( PreviousPage.IsCrossPagePostBack)
{
//執行代碼
}
//******************************************
這個PreviousPage屬性在Server.Transfer和跨網頁提交中都可以使用。在ASP.NET2.0中,我們可以在調用Server.Transfer操作後使用PreviousPage屬性在目標頁面中來獲得源頁面的數據,代碼如下:
*******************************************//
{
Server.Transfer("menu.aspx");
}
protected void Redirect_Click(object sender, EventArgs e)
//在這個接收面中我們現在可以獲得Web頁面的數據,代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
if (PreviousPage != null)
{
TextBox txtBox = (TextBox)
PreviousPage.FindControl("txtUserName");
if (textBox != null)
string userName = textBox.Text;
//其他可執行的代碼
}
}
要注意的是上面的代碼必須將txtUserName控制項轉換為TextBox類型,以便可以訪問其中的值。
七、使用PreviousPageType
PreviousPageType屬性提供了在跨網頁操作中訪問源頁面的強類型能力,下面讓我們演示一下如何不通過任何類型轉換來從源頁面中獲得控制項值。代碼如下:
< asp:Textbox ID="txtUserName" Runat="server" />
< asp:Textbox ID="txtPassword" Runat="server" />
< asp:Button ID="Submit" Runat="server" Text="Login"PostBackUrl="Menu.aspx" />
要注意的是單擊按鈕可以重定向到一個叫「Menu.asp」的目標頁。這個目標頁可以使用如下的代碼獲得用戶名和密碼:
八、保存視圖狀態
對於跨網頁提交來說,ASP.NET2.0 內嵌了一個叫__POSTBACK的隱藏欄位,這個欄位包含了關於源頁面的視圖信息 -- 也就是由源頁面提供了,包含了一個帶有一個非空PostBackUrl屬性值的服務端控制項。目標頁可以使用__POSTBACK中的信息來獲得源頁面的視圖狀態信息。代碼如下:
if(PreviousPage!=null && PreviousPage.IsCrossPagePostBack &&
PreviousPage.IsValid)
{
TextBox txtBox = PreviousPage.FindControl("txtUserName");
Response.Write(txtBox.Text);
}
在上面的代碼中核對了用於確保PreviousPage屬性不為 null的檢查代碼。順便提一下,如果目標頁和源頁面不在同一個應用程序中,這個PreviousPage屬性的值為null。只有在進行跨網頁提交操作時,IsCrossPagePostBack屬性才為true。
這個跨網頁提交的特性,是ASP.NET2.0中最強有力的特性之一,這種技術將允許在一個頁面中提交到另外一個頁面,並且可以在目標頁面地無縫地操作源頁面中的數據。
Ⅲ 怎樣實現數據綁定
怎樣實現數據綁定
凌晨三點的時候只有很少的人會去訪問你的網站,同時你需要比較多的資源執行夜間的批處理任務,那麼可以很簡單的便實現資源的交換。
虛擬機所消耗的內存、硬碟、CPU 都是固定的,一般動態調整都需要重啟虛擬機。而用 Docker 的話,你可以進行資源限制,得益於 CGroup,可以很方便動態調整資源限制,讓然也可以不進行資源限制。Docker 容器內的應用對宿主機而言只是兩個隔離的應用程序,並不是兩個虛擬機,所以宿主機也可以自行去分配資源。
Ⅳ 關於.net三層,用datagridview進行數據綁定
對GridView你就可以直接綁定了,不需要再循環了
比如這樣,
CityInfoBLL citybll = new CityInfoBLL();
List<CityInfo> list = citybll.CityInfoBind();
dataGridView1 .DataSource = list;
dataGridView1 .DataBind();
還有你的數據訪問層太勉強了,你應該把數據鏈接等操作單獨放出去,參考微軟的SqlHelper.cs
Ⅳ ASP.NET C#數據綁定
下面這段內容是以前回復其他網路網友的,其中有一個項涉及UI中GridView的綁定(這里沒有用到sqldatasource,直接調用三層結構中的BLL層,返回一個DataTable來綁定,如果你用存儲過程,你只需要修改一下BLL層調用DAL層訪問資料庫的方法),可以參考一下:---------------------------------------
第一,
1.設置資料庫可以遠程訪問(以sqlserver為例)
開始菜單---程序--- Microsoft sql server 2005---配置工具--sqlserver 外圍配置器
---服務和連接的外圍配置器
打開 MSSqlServer---DataBase Engine--遠程連接
選擇本地連接和遠程連接,再選擇同時使用TCP/IP 和named pipes 確定
2.創建Winform 應用程序
3.添加應用程序配置文件 App.config 文件,在
<configuration>
</configuration>
之間加入
<connectionStrings>
<add name="dbCon" connectionString="Data Source=127.0.0.1;Initial Catalog=Northwind;User ID=sa;PassWord=sa" providerName="System.Data.SqlClient"/>
</connectionStrings>
其中IP地址和資料庫名稱、用戶名和密碼需要改成你本地實際的
第二,
1.資料庫建表,
create table mytable(
pkid nvarchar(40) not null,
a nvarchar(40) null
)
insert into mytable(pkid,a) values(newid(),'測試')
2.新建對應此表的實體類
[Serializable]
public class mytable
{
private String _pkid = "";
public String pkid
{
get { return _pkid; }
set { _pkid = value; }
}
private String _a = "";
public String a
{
get { return _a; }
set { _a = value; }
}
}
3.新建操作類:
public class mytableDAO
{
private String _ConnectionString;
public mytableDAO(String ConnectionString)
{
this._ConnectionString = ConnectionString;
}
public int New(Entities.MsgRecord obj)
{
String sql = "insert into mytable(pkid,a) values(@pkid,@a)";
SqlConnection cn = new SqlConnection(this._ConnectionString);
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Parameters.AddWithValue("@a", obj.a);
cmd.Parameters.AddWithValue("@pkid",
String.Empty.Equals(obj.pkid) ? System.Guid.NewGuid().ToString() : obj.pkid);
try
{
if (cn.State != ConnectionState.Open)
cn.Open();
return cmd.ExecuteNonQuery();
}
catch
{
return -1;
}
finally
{
if (cn.State != ConnectionState.Closed)
cn.Close();
}
}
public int Update(Entities.mytable obj)
{
String sql = "Update mytable Set a=@a Where pkid=@ObjectID";
SqlConnection cn = new SqlConnection(this._ConnectionString);
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Parameters.AddWithValue("@a", obj.a);
cmd.Parameters.AddWithValue("@pkid", obj.pkid);
try
{
if (cn.State != ConnectionState.Open)
cn.Open();
return cmd.ExecuteNonQuery();
}
catch
{
return -1;
}
finally
{
if (cn.State != ConnectionState.Closed)
cn.Close();
}
}
public int Del(Entities.mytable obj)
{
String sql = "delete from mytable Where pkid=@ObjectID";
SqlConnection cn = new SqlConnection(this._ConnectionString);
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Parameters.AddWithValue("@ObjectID", obj.pkid);
try
{
if (cn.State != ConnectionState.Open)
cn.Open();
return cmd.ExecuteNonQuery();
}
catch
{
return -1;
}
finally
{
if (cn.State != ConnectionState.Closed)
cn.Close();
}
}
public int Del(String where)
{
String sql = String.Format("delete from mytable Where {0}", where.ToLower().Replace("update", "").Replace("delete", ""));
SqlConnection cn = new SqlConnection(this._ConnectionString);
SqlCommand cmd = new SqlCommand(sql, cn);
try
{
if (cn.State != ConnectionState.Open)
cn.Open();
return cmd.ExecuteNonQuery();
}
catch
{
return -1;
}
finally
{
if (cn.State != ConnectionState.Closed)
cn.Close();
}
}
public DataTable Query(String where)
{
String sql = String.Format("select * from mytable Where {0}", where.ToLower().Replace("update", "").Replace("delete", "").Replace("insert", "").Replace(";", "").Replace("--", "").Replace("exec", ""));
try
{
SqlDataAdapter da = new SqlDataAdapter(sql, new SqlConnection(this._ConnectionString));
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
catch
{
return null;
}
}
}
4.在ui中調用:
4.1 新增:
private void NewData()
{
String conn=System.Configuration.ConfigurationManager.ConnectionStrings["dbCon"].ConnectionString
mytableDao =new mytableDao(conn);
mytable obj=new mytable();
obj.a=this.txtbox_a.Text;
obj.b=this.txtbox_b.Text;
obj.c=this.txtbox_c.Text;
.New(obj);
}
4.2 取數據綁定GridView
private void LoadData_InitGridView()
{
String conn=System.Configuration.ConfigurationManager.ConnectionStrings["dbCon"].ConnectionString
mytableDao =new mytableDao(conn);
Table dt=.Query(String.Format(" a ='{0}'",this.txtbox_a.Text));
//gridview
this.GridView1.DataSource=dt;
this.GridView1.DataBind();
//textbox control
this.textbox_a.Text=dt.Rows[0][0].ToString();
}
4.3刪除
private void Del()
{
String conn=System.Configuration.ConfigurationManager.ConnectionStrings["dbCon"].ConnectionString
mytableDao =new mytableDao(conn);
//根據條件刪除指定記錄
.Del(where);
}
4.4更新
private void Update()
{
String conn=System.Configuration.ConfigurationManager.ConnectionStrings["dbCon"].ConnectionString
mytableDao =new mytableDao(conn);
.Update(obj);//obj 為mytable的一個實例:需要更新的
}
5.配置文件中連接信息
<connectionStrings>
<add name="dbCon" connectionString="Data Source=127.0.0.1;Initial Catalog=Northwind;User ID=sa;PassWord=sa" providerName="System.Data.SqlClient"/>
</connectionStrings>
6.讀取連接信息
System.Configuration.ConfigurationManager.ConnectionStrings["dbCon"].ConnectionString
Ⅵ 資料庫訪問技術
隨著資料庫產品和技術的發展,資料庫訪問技術也從ODBC、DAO、RDO、OLE DB、ADO 和 RDS發展到今天的ADO.NET。以下內容由城市刀客整理編輯,旨在為你展示資料庫訪問技術的概貌。
<!--[if !supportEmptyParas]-->
ODBC<!--[endif]-->
ODBC 技術為訪問不同的SQL 資料庫提供了一個共同的介面。ODBC 使用 SQL 作為訪問數據的標准。這一介面提供了最大限度的互操作性:一個應用程序可以通過共同的一組代碼訪問不同的 SQL 資料庫管理系統 (DBMS)。開發人員可以添加資料庫驅動程序,將應用程序與用戶所選的 DBMS 聯系起來。驅動程序管理器提供應用程序與資料庫之間的中間鏈接。ODBC 介麵包含一系列功能,由每個 DBMS 的驅動程序實現。當應用程序改變它的 DBMS 時,開發人員只使用新的 DBMS 驅動程序替代舊的驅動程序,並且應用程序可以無需修改代碼照常運行。
<!--[if !supportEmptyParas]-->
標准 ODBC 結構的關系圖如下:
DAO & RDO
DAO 是建立在 Microsoft Jet Microsoft Access 的資料庫引擎基礎之上的。Jet 是第一個連接到 Access 的面向對象的介面。使用 Access 的應用程序可以用 DAO 直接訪問資料庫。由於 DAO 是嚴格按照 Access 建模的,因此,使用 DAO 是連接 Access 資料庫最快速、最有效的方法。DAO 也可以連接到非 Access 資料庫,例如,SQL Server 和 Oracle。DAO 使用 ODBC,但是由於 DAO 是專門設計用來與 Jet 引擎對話的,Jet 將解釋 DAO 和 ODBC 之間的調用。使用除 Access 之外的資料庫時,這種額外的解釋步驟導致較慢的連接速度。如下圖所示:
<!--[if !supportEmptyParas]--> <!--[endif]-->
要克服這樣的限制,Microsoft 創建了 RDO。圖 Application1 顯示了 RDO 如何直接訪問 ODBC API,而無需通過 Jet 引擎。不久之後,Microsoft 推出了 ODBCDirect,它是 DAO 的擴展,在後台使用 RDO。圖 Application2 顯示 ODBCDirect 如何允許現有的 DAO 應用程序訪問資料庫,而沒有 Jet 引擎產生的性能損失。
OLE DB
OLE DB 建立於 ODBC 之上,並將此技術擴展為提供更高級數據訪問介面的組件結構。此結構對企業中及 Internet 上的 SQL、非 SQL 和非結構化數據源提供一致的訪問。(實際上,在訪問基於 SQL 的數據時,OLE DB 仍使用 ODBC,因為對於 SQL 它是最優結構。)
OLE DB 由三個組件構成:數據使用者(例如,一個應用程序);包含並公開數據的數據提供程序以及處理並傳輸數據的服務組件(例如,查詢處理器、游標引擎)。OLE DB 是一個針對 SQL 數據源和非 SQL 數據源(例如,郵件和目錄)進行操作的 API。如下圖所示:
OLE DB 為 C 和 C++ 程序員及使用其他包含 C 樣式函數調用語言的程序員提供綁定。有一些語言(例如 VB 和 VBScript)不提供指針數據類型(地址變數)。因此,這些語言不能使用 C 樣式綁定,而且不能直接調用 OLE DB。<!--[if !supportEmptyParas]--> <!--[endif]-->
在此基礎上,Microsoft 推出了另一個數據訪問對象模型:ADO。ADO 採用基於 DAO 和 RDO 的對象,並提供比 DAO 和 RDO 更簡單的對象模型(盡管會產生一些冗餘的功能,如現在進行一項操作時可以用不止一種方法)。ADO 中的對象層次結構比 DAO 中的更平緩。ADO 包含一些簡化對數據存儲區數據的訪問任務的內置對象。
<!--[if !supportEmptyParas]-->
下圖顯示了應用程序連接到資料庫可採取的許多途徑。例如,VB 程序員可以使用 ADO 將應用程序連接到 OLE DB 提供程序。如果資料庫不支持 OLE DB,應用程序可以通過 ODBC 連接。Visual C++ (VC++) 程序員可以使用 ADO 或直接通過 OLE DB 連接。
讓我們看一個簡單示例,它顯示 ADO 是如何運行的。清單 1 顯示可如何使用典型的記錄集對象--ADO 中的核心對象。記錄集對象表示一系列記錄(很像一個表),並支持游標類型,例如,adOpenForwardOnly、adOpenKeyset、adOpenDynamic 和 adOpenStatic。游標可以在伺服器端(默認情況下),也可在客戶端。<!--[if !supportEmptyParas]--> <!--[endif]-->
清單 1
<!--#include file="adovbs.inc"-->
<%
Dim connStr, rs
connStr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=localhost"
SET rs= Server.CreateObject("ADODB.Recordset")
<!--[if !supportEmptyParas]-->rs.Open "Authors", connStr, adOpenForwardOnly, adLockOptimistic, adCmdTable
WHILE NOT rs.EOF
response.write rs("au_fname") & "," & rs("au_lname") & "<br>"
rs.moveNext
END
SET rs=nothing
%>
<!--[if !supportEmptyParas]-->
要訪問一條記錄,ADO 需要按順序掃描記錄集。要訪問多個表,需要執行 JOIN 查詢,並將返回的結果作為記錄集。雖然記錄集對象支持斷開的數據訪問,ADO 還是主要為連接的數據訪問而設計。這種連接的訪問模式佔用伺服器端的重要資源。另外,要傳輸記錄集,必須使用 COM 封送處理。COM 封送處理是數據類型轉換過程,這種轉換佔用額外的系統資源。<!--[if !supportEmptyParas]--> <!--[endif]-->
從 ADO 2.1 開始,Microsoft 將 XML 支持添加到 ADO 對象模型,這樣就可將記錄集保存為 XML 文檔。然而,直到 ADO 2.5 出現,ADO 2.1 中 XML 支持的一些限制(例如,分層記錄集對象的保持)才被取消。雖然 ADO 可以將 XML 文檔讀入記錄集,但它只能讀取名為高級數據表圖 (Advanced Data TableGram, ADTG) 的專用架構。<!--[if !supportEmptyParas]--> <!--[endif]-->
Microsoft 希望擁有斷開的數據訪問機制,它擴展了 ADO 並推出遠程數據服務 (RDS)。RDS 是按照 ADO 建模的,無需實時連接就可以使記錄集傳輸到客戶端(例如,Web 瀏覽器)。然而,如同 ADO 一樣,RDS 使用 COM 封送處理將記錄集從伺服器傳輸到客戶端。
ADO.NET
在開始設計 .NET 框架時,Microsoft 就以此為契機重新設計了數據訪問模型。Microsoft 沒有進一步擴展 ADO,而是決定設計一個新的數據訪問框架,但保留了縮寫詞。Microsoft 根據其成功的 ADO 對象模型經驗設計了 ADO.NET。但 ADO.NET 滿足了 ADO 無法滿足的三個重要需求:提供了斷開的數據訪問模型,這對 Web 環境至關重要;提供了與 XML 的緊密集成;還提供了與 .NET 框架的無縫集成(例如,兼容基類庫類型系統)。
下圖顯示了 ADO.NET 的結構。但缺少了能夠在 ADO 中執行諸多功能的記錄集對象。ADO.NET 具有幾個專用對象以執行特定任務,用於代替記錄集對象。表 1 描述了其中的三個專用對象:DataAdapter、DataReader 和 Dataset。
表一:
DataAdapter The DataAdapter object provides a bridge between the database and a DataSet. The key advantage of DataAdapter is that it can work with any data source. The data source might be a database or it might be an XML document.
//DataAdapter提供了一個資料庫與DataSet之間的橋梁。它最大的優點在於能工作於不同的數據源,這些數據源可以是資料庫,也可以是 XML文件。
DataReader The DataReader object provides an efficient way to retrieve records on the server side. DataReader is a connected, read-only, and forward-only data-access mode. This object is useful for Web applications, which use DataReader to display records on Web pages.
//DataReader對象提供了從伺服器端高效獲取數據的途徑,它是在只讀和只進的連接模式下從數據源讀取數據的,這個對象對通過網頁展示數據記錄的Web應用程序開發很有用。
DataSet The DataSet object provides disconnected copies of records from a database. The DataSet object stores records from a table (or multiple tables) in memory without holding a connection to the server. When in memory, DataSet is a binary object. When the DataSet is remoted, transferred, or serialized, it''s represented as a DiffGram—an XML format. Because XML is plaintext, records can be exchanged easily over the Web, bypassing firewall restrictions(限制性). DataSet also contains various objects—such as constraints(壓縮), relationships, and views—that let you manipulate(操作) tables on the client side instead of working through one Recordset in ADO.
//DataSet對象在斷開資料庫連接的情況下提供了一個資料庫內容的拷貝,它把記錄從表中取出,以二進制對象的形式存放在內存中。當Dataset被調用的時候,它表現為DiffGram--一種XML格式。
Ⅶ asp.net 資料庫書庫綁定
要看你怎麼寫,如果只為實現效果,而不編寫代碼的話,可以直接使用資料庫直接對應的數據源控制項(數據工具欄中的AccessDataSource對應Access,SqlDataSource對應Sql,如果自行編寫業務層的話用ObjectDataSource)
以下以SqlDataSource為例,拖一個SqlDataSource放置於頁面,點擊配置數據源->新建連接->填寫伺服器名、用戶名、密碼(最好測試連接是否成功),再選擇一個資料庫
在配置Select語句界面中,選擇你需要的表,以及相應的欄位,若有條件請點擊where,有排序用order by.最後點擊完成
拖一個數據展示控制項(GridView、DataList、Repeater,其中Repeater需要自行寫代碼綁定)。選擇數據控制項,選擇剛才建立的數據源。初步完成,但列名是按資料庫表的結構命名的,可以「編輯列」來進行修改(修改HeaderText屬性,千萬別改DataField屬性)
如果是Access資料庫只是數據源改為選擇文件,後面的步驟與上面相同
Ⅷ asp.net2.0數據訪問控制項包括哪些及其特點
DataGrid 控制項仍需要編寫大量自定義代碼來處理普通操作,如分頁、排序、編輯和刪除數據。例如,當用戶單擊以保存或取消更改時,DataGrid 控制項能夠引發事件但不提供更多的功能。如果要將更改存儲到持續媒介(如一個資料庫)之中,則必須自己處理 UpdateCommand 事件,檢索更改後的值,編寫一條 SQL 命令,然後從該處提交更新。
DataGrid 控制項限制普通數據操作的引發事件,因為它是一個數據源不可知的控制項,能夠綁定到任何可枚舉的數據對象。執行數據操作(如更新或刪除)需要直接連接到一個特定的數據源。在 ASP.NET 1.x 中,則通過編寫特定於應用程序的 ADO.NET 代碼解決這個問題的。
ASP.NET 2.0 改進了數據綁定體系結構,引入了新的系列組件(數據源對象)作為數據綁定控制項與 ADO.NET 對象之間的橋梁。這些源對象提升了一個略為不同的編程模型,提供了新功能和新成員。您的 ASP.NET 2.0 應用程序應該使用最新的網格控制項 — GridView,顯示數據報告。與之相似的 DataGrid 控制項仍然支持,但 DataGrid 不能充分利用數據源組件的特定功能。
GridView 控制項是 DataGrid 的接替者,並從幾個方面擴展了後者的功能。首先,它完全支持數據源組件,能夠自動處理諸如分頁、排序和編輯等數據操作,前提是綁定的數據源對象支持這些操作。另外,GridView 控制項有一些比 DataGrid 優越的功能上的改進。特別是,它支持多個主鍵欄位,公開了一些用戶界面的改進功能和一個處理與取消事件的新模型。
GridView 附帶了一對互補的視圖控制項:DetailsView 和 FormView.通過這些控制項的組合,您能夠輕松地建立主/詳細視圖,而只需少量代碼,有時根本不需要代碼。
GridView 與 DataGrid
ASP.NET 2.0 中數據綁定控制項的類層次結構比 ASP.NET 1.x 中的更一致。在 2.0 版本中,所有控制項無論有什麼樣的實際實現過程和用戶界面特點,均從同一個基類(BaseDataBoundControl 類)派生。圖 1 顯示新的類關系圖。DataGrid 和其他 1.x 版本的控制項(如 Repeater 和 DataList)沒有包含在該關系圖中。這些現有控制項的繼承樹與 ASP.NET 1.x 的相同。特別是,Repeater 繼承了 WebControl,而 DataList 和 DataGrid 繼承了 BaseDataList.如圖 1 所示,GridView 是一個復合數據綁定控制項,它與其他所有數據綁定控制項(包括 DropDownList、DetailsView 和 ListBox)共享一組方法和屬性。
GridView 和 DataGrid 控制項的高級功能相似,但基礎卻不同。GridView 盡可能地保留了 DataGrid 的對象模型,以便輕松地從現有頁面進行移植。但是,基於 DataGrid 的代碼與新的基於 GridView 的代碼不可能 100% 兼容。
DataGrid 與 GridView 控制項的另一個主要差異在於自適應用戶界面。與 1.x 版本的 DataGrid 不同的是,GridView 也能在移動設備上顯示。換句話說,您能夠使用相同的用於桌面頁面的網格控制項在移動設備上生成報告。2.0 版本的 DataGrid 也能自適應地顯示,但是它的 UI 功能沒有 GridView 豐富。
在 ASP.NET 2.0 中,改進後的 DataGrid 控制項支持諸如主題和個性化等通用的控制項功能。此外,新的 DataGrid 控制項可由一個數據源控制項填充。但要記住,綁定到數據源對象的 DataGrid 只能用於讀取數據。要實際修改底層數據源,仍然需要一些用戶定義的代碼。而 GridView 控制項可以利用底層數據源的功能並自動刪除或更新記錄。注意,GridView 控制項也支持傳統的基於 DataSource 屬性和 DataBind 方法的綁定機制。盡管完全支持這種綁定機制,但是不鼓勵使用這樣的編程實踐方法。
GridView 和數據源控制項
那麼,數據源控制項是什麼?我在 2004 年 6 月一期的 MSDN?Magazine 中詳細介紹了 ASP.NET 2.0 的這項流行的新功能。簡言之,一個數據源控制項就是一組 Microsoft? .NET Framework 類,它有利於數據存儲和數據綁定控制項之間的雙向綁定。現有的控制項(如 DataGrid)以及新的數據綁定控制項(如 GridView),盡管綁定能力不同,但都能綁定到一個數據源。
一個數據源控制項代表了數據源的主要功能:選擇、插入、更新和刪除。數據源控制項能代表任何數據源:從關系數據源庫到 XML 文件,從流數據到業務對象。如果簡要介紹能讓您想起 .NET 的託管提供程序,請參見圖 2.
圖 2 數據源控制項、GridView 和數據源
數據源控制項可以位於一些 .NET 數據提供程序的上層,在數據綁定控制項和數據源之間形成一個中間層。數據源控制項也會公開一個提供基本操作的公共介面。一些數據綁定控制項 — 特別是 GridView 控制項,將這些命令與其他與數據有關的操作一起,綁定到適當的自動編輯。
數據源控制項通過其屬性和方法,將綁定內容以一組命名的視圖形式公開。IDataSource 介面提供從數據源檢索數據視圖的基本功能集,所有數據源控制項都實現了這個介面。ASP.NET 2.0 提供一些內置數據源控制項,如圖 3 所列。圖 3列出的數據源控制項屬於兩類:列表和分層組件。SiteMapDataSource 和 XmlDataSource 組件是分層數據源控制項,用於像 TreeView 和 Menu 控制項這樣的分層組件。其他各種組件用於管理列表數據。
圖 4 中的代碼說明如何在一個示例頁面上將 GridView 和 DataGrid 綁定到同一個數據源控制項。在 ASP.NET 2.0 中,這是推薦的數據綁定方法。SqlDataSource 控制項的特點是一個 ConnectionString 屬性加上 SelectCommand、UpdateCommand、InsertCommand 和 DeleteCommand 屬性的任意組合。所有屬性都是字元串形式,並且引用帶有可選參數的命令文本:
<asp:SqlDataSource runat="server"
ID="MySource"
ConnectionString="SERVER=(local);
DATABASE=northwind;Integrated Security=SSPI;"
SelectCommand="SELECT * FROM employees WHERE employeeid > @MinID">
<SelectParameters>
<asp:ControlParameter Name="MinID"
ControlId="EmpID"
PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
每個數據源控制項由唯一的 ID 表示。ID 是連結數據綁定控制項和數據源控制項之間的紐帶。通過 DataSourceId 屬性將 GridView 綁定到一個數據源控制項。例如,每當網格需要獲取數據時,就執行與 SQLDataSource 控制項相關聯的 SelectCommand SQL 命令。當網格需要更新或刪除一條記錄時,就執行相應的 UpdateCommand 或 DeleteCommand SQL 命令。如果不存在這樣的命令,則引發一個異常。在內部,當用戶刪除或更新一條記錄時,GridView 就像 1.x 版本的 DataGrid 一樣引發事件。但是與 DataGrid 不同的是,GridView 為這些事件定義內部的處理程序。默認的處理程序檢索綁定數據源定義的命令來處理和執行這些操作。圖 4說明,在保持網格顯示或更新數據的標記後無需編寫代碼。在更復雜的情況下,您可能需要編寫一些代碼。
Ⅸ Visual Basic中訪問遠程資料庫的幾種關鍵技術(1)
關鍵詞控制項資料庫介面 Visual Basic專業版是一種廣泛使用的資料庫編程語言 ,提供了對資料庫應用的強大支持。VB訪問資料庫的方法大致有三類:使用數據綁定控制項,使用資料庫存取對象變數(Data Access Object Vari?鄄able),直接調用ODBC 2.0 API介面函數。 1VB的資料庫結構 VB資料庫的核心結構是MicroSoft Jet資料庫引擎,JET引擎的作用是支持多種ISAM(Indexed Sequential Access Method,即索引順序存取方 法) 數據驅動程序。VB環境下Access是預設的數據格式,對於其他的關系型資料庫如Fox?鄄Pro、Dbase(或 Xbase)、Paradox、Btrieve等,VB的專業版可兼容其驅動程序,這就使得VB能支持這些資料庫格式。由上可見,Ms JET引擎實質上提供了:一個符合ANSI標準的語法分析器;為查詢結果集的使用而提供的內存管理功能;同所支持的資料庫的外部介面;為應用代碼提供的內部介面。 2VB訪問資料庫的原則和方法 2.1VB訪問資料庫的原則 2.1.1代碼的重用和運行的效率 VB程序設計中,應盡可能減少代碼的重復編寫,提高運行效率。例如:通過使用ODBC數據源連接資料庫的方法,可在變換多種資料庫類型的情況下,而不用頻繁修改代碼。用VBSQL通過DB-Library就做不到。而ODBC介面並不是VB訪問資料庫運行效率最高的方法。同樣,同是使用ODBC介面的ADO的效率要高於RDO。 2.1.2實現的簡便性,易維護性 如果一種方法實現起來很復雜,工程的開發必然造成人力物力的浪費,同時這樣設計出來的應用程序只會支持起來更復雜或維護時更困難。例如:本地需要 訪問ISAM 或Jet 類型數據源,那麼就使用DAO/Jet,而沒有必要使用通過ODBC的方法。RDC實現起來要較RDO更容易。 2.1.3安全原則 這一條應根據環境和條件決定。例如區域網的網路安全性要好於廣域網,因而可直接利用數據控制項DC,這樣實現起來方便快捷,而廣域網需要大量的錯誤捕獲,如用RDC就不如用RDO易控制錯誤。 2.2數據訪問介面功能及含義 ADC(Advanced Data Connector):高級數據連接器, 提供綁定ADO數據源到窗體的數據綁定控制項上。ADC主要是一種直接訪問或者通過ADO訪問遠程OLE DB對象的一種技術,它也支持主要應用在微軟IE瀏覽器上的數據綁定控制項。它是特地為Web上的瀏覽器為基礎的應用程序而設計的。 ADO(Active Data Objects):Active 數據對象,ADO實際是一種提供訪問各種數據類型的連接機制。ADO設計為一種極簡單的格式,通過ODBC的方法同資料庫介面。可以使 用任何一種ODBC數據源,即不止適合於SQL Server、Oracle、Access等資料庫應用程序,也適合於Ex?鄄cel表格、 文本文件、 圖形文件和無格式的數據文件。ADO是基於OLE-DB 之 上的技術,因此ADO通過其內部的屬性和方法提供統一的數據訪問介面方法。 DAO(Data Access Objects):數據訪問對象,是一種面向對象的界面介面。通過DAO/Jet 功能可以訪問ISAM 資料庫,使用DAO/ ODBC Direct功能可以實現遠程RDO功能。使用DAO的程序編碼非常簡單,DAO提供豐富的游標(Cursor)類型的結果集和非游標(Cursor-Less)類型的結果集,同DDL( 數據描述語言)的功能很類似。 DAO模型是設計關系資料庫系統結構的對象類的集合。它們提供了完成管理這樣一個系統所的全部操作的屬性和方法,包括創建資料庫,定義表、欄位和索引,建立表間的關系,定位和查詢資料庫等工具。 JET(Joint Engine Technology):數據連接性引擎技術,是一種基於工作站通過DAO的資料庫訪問機制。雖然可以通過微軟Access提供的ODBC驅動程序訪問Jet資料庫,但使用這些驅動程序在功能上有所限制。Jet機制有自己的查詢和結果集處理功能,並可對同種或異種數據源作查詢處理。 ODBC(Open Database Connectivity):開放式的資料庫連接,是一種公認的關系數據源的介面界面。提供統一介面的界面,ODBC對任何數據源都未作優化。 ODBC Direct:是一種基於DAO對象的新的DAO模式, 其方法和屬性與RDO功能相同。使用在有DAO代碼存在的場合,可用來訪問遠程數據源。 OLE DB:是一種底層數據訪問界面介面。是用於第三方驅動程序商家開發輸出數據源到ADO技術的應用程序或用於C++的開發者開發定製的資料庫組件。