Ⅰ 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++的开发者开发定制的数据库组件。