ASP.NET连接数据库并获取数据方法总结

本文实例讲述了ASP.NET连接数据库并获取数据方法。分享给大家供大家参考,具体如下:

*连接对象的用法SqlConnection,SqlCommand,SqlDataAdapter
*数据访问方式的写法

1.获取数据:

//引用这两个命名空间
using System.Data.SqlClient;
using System.Data;
// 初始化连接对象
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "User ID=sa;Initial Catalog=DataBaseName;Data Source= (local);Password=111111";
// 打开连接
if (conn.State == ConnectionState.Closed)
{
  conn.Open();
}
// 初始化命令
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "sql语句";
// 用于执行数据插入、更新和删除的操作;返回被影响的行数。
int i = cmd.ExecuteNonQuery();
if(i>0){MessageBox.Show("操作成功");}
// 用于查询最大值等只需返回一条数据情况下的操作;返回的是首行第一列的数据。
object obj = cmd.ExecuteScalar();
// 如果想获取数据集合的话我们经常使用到的是数据适配器
DataTable dt = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(dt);

2.把数据绑定到数据控件

string str = "Data Source=.;Initial Catalog=GridView;User ID=sa;Password=111111";
string sql = "select * from UserName";
SqlConnection conn = new SqlConnection(str);
//conn.Open(); 使用 SqlDataAdapter(数据适配器)不用写
//SqlCommand comm = new SqlCommand(sql, conn);
//SqlDataAdapter dr = new SqlDataAdapter(comm);
SqlDataAdapter dr = new SqlDataAdapter(sql,conn);//上面两句可以合并成这一
DataSet ds = new DataSet();//创建数据集;
dr.Fill(ds); //填充数据集
this.GridView1.DataSource = ds;
this.GridView1.DataBind();//讲数据源绑定到控件上,
//conn.Close(); 关闭数据库连接
if (conn.State==ConnectionState.Open) //判断数据库连接状态,是否连接
{
conn.Close();
}

3.使用SqlDataReader:

若要创建 SqlDataReader,必须调用 SqlCommand 对象的 ExecuteReader 方法,而不要直接使用构造函数。

string str = "Data Source=.;Initial Catalog=GridView;User ID=sa;Password=111111";
string sql = "select * from UserName";
SqlConnection conn = new SqlConnection(str);
conn.Open();
SqlCommand comm = new SqlCommand(sql, conn);
DataSet ds = new DataSet();
SqlDataReader dr = comm.ExecuteReader();
if (dr.Read())
{
  //下面两种都可以获得数据
  //this.TextBox1.Text = dr.GetString(1);
  //this.TextBox2.Text = dr.GetInt32(3).ToString();
  this.TextBox1.Text = dr.GetString(dr.GetOrdinal("Name"));
  this.TextBox2.Text = dr.GetInt32(dr.GetOrdinal("Age")).ToString();
}
//循环输出
while (dr.Read())
{
  Response.Write(dr["Name"]);
  Response.Write(dr["Age"]);
  Response.Write("<br/>");
}
dr.Close();
if (conn.State == ConnectionState.Open)
{
  conn.Close();
}

SqlDataReader:提供一种从 SQL Server 数据库读取行的只进流的方式

补充:asp.net数据库连接web.config配置

SQL Server .NET Data Provider 连接字符串包含一个由一些属性名/值对组成的集合。每一个属性/值对都由分号隔开。

PropertyName1=Value1;
PropertyName2=Value2;
PropertyName3=Value3;
.....

同样,连接字符串必须包含SQL Server实例名称:

代码如下:

Data Source=ServerName;

使用本地的SQL Server(localhost),如果想要使用远程服务器运行,应该在示例对象中把正确的服务器赋给Data Source 属性。此外,还必须指定所支持的两种身份验证方法(即Windows身份验证和SQL Server身份验证)中的其中一种。Windows身份验证使用Windows登录用户身份连接数据库,而SQL身份验证要求显式地指定SQL Server用户ID和密码。要想使用Windows身份验证,必须在连接字符串中包括 Integrated Security 属性:

Data Source=ServerName;
Integrated Security=True;

默认情况下,Integrated Security 属性为 False ,这意味着将禁用Windows身份验证。如果没有显式地把这个属性的值设置为True,连接将使用SQL Server身份验证,因此,必须提供SQL Server用户ID和密码。Integrated Security属性还能识别的其他值只有SSPI(Security Support Provider Interface,安全性支持提供者接口).在所有的Windows NT操作系统上,其中包括Windows NT 4.0、2000、XP,都支持值SSPI。它是使用Windows身份验证时可以使用的惟一接口,相当于把Integrated Security 属性值设置为True。

在Windows身份验证模式中,SQL Server使用Windows的安全子系统对用户连接进行有效性验证。即使显示地指定用户ID和密码,SQL Server也不检查连接字符串中的用户ID和密码。因为只有Windows NT、2000、XP支持SSPI,因此如果正使用的是这些操作系统,则只能使用Windows集成的安全策略去连接SQL Server。不论使用哪一个操作系统,当使用SQL Server身份验证时,必须在连接字符串中指定用户ID和密码:

Data Source=ServerName;
User ID=donaldx;
Password=unbreakable

默认情况下,SQL Server .NET Data Provider连接指定用户的默认数据库,当在数据库中创建用户时,可以设置用户的默认数据库。此外,也可以在任意时间更改用户的默认数据库。例如,系统管理员的默认数据库是master。如果想要连接不同的数据库,应该指定数据库的名称:

Data Source=ServerName;
Integrated Security=SSPI;
Initial Catalog=Northwind

每一种身份验证都有它的优点和缺点。Windows身份验证使用单一的用户信息库源,因此,不需要为数据库访问去分别配置用户。连接字符串不包含用户ID和密码,因此消除了把用户ID和密码暴露给未授权的用户的危险。可以在Active Directory中管理用户和他们的角色,而不必在SQL Server中显式地配置他们的属性。

Windows身份验证的缺点是,它要求客户通过Windows的安全子系统支持的安全通道去连接SQL Server。如果应用种序需要通过不安全的网络(例如Internet)连接SQL Server,Windows身份验证将不工作。此外,这种身份验证方法也部分地把管理数据库访问控制的责任从DBA身上转移到了系统管理员身上,这在确定的环境中也许是一个问题。

一般而言,在设计通用的应用程序时,为了使用Windows身份验证,将会对一些方面进行加强。大多数公司的数据库都驻留在比较健壮的Windows服务器操作系统上,那些操作系统都支持Windows身份验证。数据访问层和数据表示层的分离也促进了把数据访问代码封装在中间层组件思想的应用,中间层组件通常运行在具有数据库服务器的内部网络中。当这样设计时,就不需要通过不安全通道建立数据库连接。除此之外,Web服务也使直接连接不同域中数据库的需要大减少。

数据库的连接性已经发展成为应用程序开发的一个标准方面。数据库连接字符串现在已经成为每个项目的标准必备条件。我发现自己为了找到所需要的句法,经常要从另外一个应用程序中复制连接字符串或者进行一次搜索。这个在与SQL Server交互操作时更是如此,因为它有太多的连接字符串选项。现在就让我们来研究一下连接字符串的众多方面。

连接字符串

在对象实例化或者建立期间,数据库连接字符串通过属性或方法被传递到必要的对象。连接字符串的格式是一个以分号为界,划分键/值参数对的列表。列表A中包括了一个C#中的例子,说明了怎样用创建SqlConnection对象的方法连接到SQL Server(实际的连接字符串是通过对象的ConnectionString属性分配的)。列表B中包括的是VB.NET的版本。

列表A

string cString = "Data Source=server;Initial Catalog=db;User ID=test;Password=test;";
SqlConnectionconn = new SqlConnection();
conn.ConnectionString = cString;
conn.Open();

列表B

Dim cString As String
cString = "Data Source=server;Initial Catalog=db;User ID=test;Password=test;"
Dim conn As SqlConnection = New SqlConnection()
conn.ConnectionString = cString
conn.Open()

连接字符串会指定数据库服务器和数据库,以及访问数据库必需的用户名和密码。但是这种格式并不是对所有数据库交互都适用,它的确有许多可用的选项,其中很多选项都有同义词。

和Data Source(数据源)、Initial Catalog(初始编目)、User ID(用户ID)、和Password(密码)等元素一起,下面这些选项都是可用的:

Application Name(应用程序名称):应用程序的名称。如果没有被指定的话,它的值为.NET SqlClient Data Provider(数据提供程序).
AttachDBFilename/extended properties(扩展属性)/Initial File Name(初始文件名):可连接数据库的主要文件的名称,包括完整路径名称。数据库名称必须用关键字数据库指定。

Connect Timeout(连接超时)/Connection Timeout(连接超时):一个到服务器的连接在终止之前等待的时间长度(以秒计),缺省值为15。

Connection Lifetime(连接生存时间):当一个连接被返回到连接池时,它的创建时间会与当前时间进行对比。如果这个时间跨度超过了连接的有效期的话,连接就被取消。其缺省值为0。

Connection Reset(连接重置):表示一个连接在从连接池中被移除时是否被重置。一个伪的有效在获得一个连接的时候就无需再进行一个额外的服务器来回运作,其缺省值为真。

Current Language(当前语言):SQL Server语言记录的名称。

Data Source(数据源)/Server(服务器)/Address(地址)/Addr(地址)/Network Address(网络地址):SQL Server实例的名称或网络地址。

Encrypt(加密):当值为真时,如果服务器安装了授权证书,SQL Server就会对所有在客户和服务器之间传输的数据使用SSL加密。被接受的值有true(真)、false(伪)、yes(是)和no(否)。

Enlist(登记):表示连接池程序是否会自动登记创建线程的当前事务语境中的连接,其缺省值为真。

Database(数据库)/Initial Catalog(初始编目):数据库的名称。

Integrated Security(集成安全)/Trusted Connection(受信连接):表示Windows认证是否被用来连接数据库。它可以被设置成真、伪或者是和真对等的sspi,其缺省值为伪。

Max Pool Size(连接池的最大容量):连接池允许的连接数的最大值,其缺省值为100。

Min Pool Size(连接池的最小容量):连接池允许的连接数的最小值,其缺省值为0。

Network Library(网络库)/Net(网络):用来建立到一个SQL Server实例的连接的网络库。支持的值包括: dbnmpntw (Named Pipes)、dbmsrpcn (Multiprotocol/RPC)、dbmsvinn(Banyan Vines)、dbmsspxn (IPX/SPX)和dbmssocn (TCP/IP)。协议的动态链接库必须被安装到适当的连接,其缺省值为TCP/IP。

Packet Size(数据包大小):用来和数据库通信的网络数据包的大小。其缺省值为8192。

Password(密码)/Pwd:与帐户名相对应的密码。

Persist Security Info(保持安全信息):用来确定一旦连接建立了以后安全信息是否可用。如果值为真的话,说明像用户名和密码这样对安全性比较敏感的数据可用,而如果值为伪则不可用。重置连接字符串将重新配置包括密码在内的所有连接字符串的值。其缺省值为伪。

Pooling(池):确定是否使用连接池。如果值为真的话,连接就要从适当的连接池中获得,或者,如果需要的话,连接将被创建,然后被加入合适的连接池中。其缺省值为真。

User ID(用户ID):用来登陆数据库的帐户名。

Workstation ID(工作站ID):连接到SQL Server的工作站的名称。其缺省值为本地计算机的名称。

解决SQL Server 连接时的一些基本问题后的若干初浅心得

学生做了一个题库系统,用C#写的ASP应用程序,数据库用SQL Server2000,交给我看看。放到服务器上后,出现问题。反复调整后发现了解决的方法,其实很简单。回过头去看了看,发现是自己对SQL Server的连接语句和用户权限的认识不足所造成的。下面将我的一些心得以及网上查到的有关资料汇集一下,以为后来者借鉴,当然很肤浅。

1、SQL Server的连接方式

以本地服务器(LocalHost),数据库(Northwind)为例,可以有以下一些连接方式

SqlConnection conn=new SqlConnection( "Server=LocalHost;Integrated Security=SSPI;Database=Northwind");
SqlConnection conn = new SqlConnection("Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=Northwind;");
SqlConnection conn = new SqlConnection(" Data Source=LocalHost;Initial Catalog=Northwind;Integrated Security=SSPI;Persist Security Info=False;Workstation Id=XURUI;Packet Size=4096; ");
SqlConnection myConn = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Database=northwind;Server=LocalHost");
SqlConnection conn = new SqlConnection(" Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900");

心得:

a.Server和Database,Data Source和Initial Catalog配对使用的,可以互相替换(见笑)

b.Integrated Security默认值是False,此时需要提供Uid和Pwd,即将以Sql Server 用户身份登陆数据库;如果设置为True,Yes 或 SSPI,这不能出现Uid和Pwd,将以Windows用户省份登陆数据库。强烈推荐用后一种形式,安全性更高。

c.Integrated Security和Persist Security Info同时出现,后者设置为False,可保证信息安全。

更多字符串连接说明请看MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp

连接字符串的书写应该熟练后应该没有什么问题,我是再看别人的程序,说实话有些东东还真不清楚。但连接不上的问题出现后,得解决呀。所以必须要弄懂这些关键字的意义,修改后再测试。

2、SQL Server的用户设置

问题一、采用连接字符串

代码如下:

SqlConnection conn = new SqlConnection(" Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900");

错误:

用户"sa"登陆失败,没有可信任的Sql Server连接
查资料后找到解决方法:

原因:Sql Server的验证方式需要设置为Sql Server验证和Windows集成验证的混合方式,如果仅设置为后一种方式,就会出像上述问题

解决:运行Sql Server的企业管理器,点击服务器,在右键菜单中选择属性,选安全性,更改验证方式即可

问题二、采用连接字符串

代码如下:

SqlConnection conn = new SqlConnection("Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=Northwind;");

错误:

用户"computername\IWAM_servername"登陆失败

原因:SQL Server的登陆用户中不包括IWAM_servername

解决方法:运行Sql Server的企业管理器,点击服务器,选安全性,选登陆,新建登陆中加入IWAM_servername,并配备相应的权限,如只能访问Northwind数据库,数据库的角色设置为public和db_owner。

3、关于连接的安全性

最好使用SSPI的集成安全方式连接数据库,而sa用户的方式连接会存在安全隐患,我认为主要是因为在安装SQL Server时,经常会为了访问的方便设置sa的密码为空,黑客一旦让sa成为管理员,就可以获得对系统的所有访问权限。所以为了数据库的安全,可以设置 SQL server的访问用户只能经过windows集成验证,设置sa的安全密码,加强数据库的安全性。当然设置为windows集成验证后,数据库的性能和访问的灵活性势必会受到影响,管理员可以针对每一个数据库设置不同的验证方式,而不必对SQL server设置成统一的方式。

希望本文所述对大家asp.net程序设计有所帮助。

(0)

相关推荐

  • ASP.NET连接sql2008数据库的实现代码

    利用SqlConnection对象连接sql2000以上版本,并使用SqlCommand对象对数据库进行读取. SqlCommand类概述: 用于对sql数据库执行sql语句或存储过程. 命名空间:System.Data.SqlClient 程序集: System.Data(在 System.Data.dll中) SqlCommand类的属性 1.CommandText 获取或设置要对数据源执行的Transact-SQL语句或存储过程. 2. CommandType 获取或设置一个值,该值指示如

  • ASP.NET连接MySql数据库的2个方法及示例

    方法一: 使用MySQL官方组件使用MySQL推出的 MySQL Connector/Net 组件, 该组件是MySQL为ADO.NET访问MySQL数据库设计的.NET专用访问组件.完成该组件后,需要在项目中引用这个组件,也可以直接在配置文件的< assemblies>节点内添加下面的节点: 复制代码 代码如下: <add assembly="MySql.Data, Version=5.1.5.0, Culture=neutral, PublicKeyToken=C5687F

  • 动态指定任意类型的ObjectDataSource对象的查询参数

    ObjectDataSource在使用时需要事先指定查询方法SelectMethod(其实还有InsertMethod,UpdateMethod和DeleteMethod),TypeName和DataObjectTypeName,然后我们只需要编写好SelectMethod方法的实现,如果需要分页,那么还要指定MaximumRwosParameterName属性和StartRowIndexParameterName,然后在SelectMethod方法中加上相应的参数,当然,SelectCount

  • gridview+objectdatasource+aspnetpager整合实例

    前台代码: 复制代码 代码如下: <asp:GridView ID="viewIShow" runat="server" DataSourceID="ObjectDataSource1"                    AllowPaging="True" AutoGenerateColumns="False"                    OnRowCommand="view

  • asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页

    ListView控件本身并没有分页功能,不过借助于ASP.NET中新增加的DataPager控件,我们可以非常方便地对ListView中的数据设置分页,这几乎不需要开发人员写一行代码,将ListView控件放到页面上,设置好布局和DataSource,然后再添加一个DataPager控件,将它的PagedControlID属性设置成ListView的ID,PageSize中设置每页要显示的数据条数,然后在Fields中设置好分页的样式(当然你完全可以不用去管样式,ASP.NET会根据内置的样式来

  • asp.net中将数据库绑定到DataList控件的实现方法与实例代码

    解决方法1: datalist databind() 解决方法2: 查看MSDN上的详细说明资料 解决方法3: 在DataList的模板中用table表格,如: 复制代码 代码如下: <asp:DataList ID="dlDetailedInfo" runat="server" OnItemDataBound="dlDetailedInfo_ItemDataBound" Width="100%"> <Ite

  • ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法

    在ASP.NET开发的网站根目录,有一个名为web.config的文件,顾名思义,这是为整个网站进行配置的文件,其格式为XML格式.这里主要谈谈文件中的<connectionStrings>节. <connectionStrings>节是对连接到数据库的字符串进行配置,由于MS SQL Server与ASP.NET同属于微软的产品,因此是使用ASP.NET开发时首选的数据库是MS SQL Server,本文只讨论对MS SQL Server的连接字符串情况.第一种情况,本地开发时,

  • ASP.NET中操作SQL数据库(连接字符串的配置及获取)

    在WebConfig中配置数据库连接字符串,代码如下: 复制代码 代码如下: <connectionStrings> <add name="ConnectionString" connectionString="user id=用户名;password=密码;initial catalog=数据库名称;data source=服务器名称"/> </connectionStrings> 然后在Webform_1.aspx.cs里面获

  • ASP.NET中 ObjectDataSource控件的DataObjectTypeName属性

    一.ObjectDataSource 控件说明 获取或设置某个类的名称,ObjectDataSource 控件将该类用于更新.插入或删除数据操作中的参数,而不是从数据绑定控件传递个别的值. 您不用指定传递给 Update.Insert 和 Delete 方法的多个参数,而是可以创建一个累计多个数据字段值的对象.仅给方法传递这一个对象,而不是多个参数. 绑定到数据绑定控件的 ObjectDataSource 控件的默认行为是,数据绑定控件为数据源中的每个参数创建一个 Parameter 对象.如果

  • ASP.NET连接数据库并获取数据方法总结

    本文实例讲述了ASP.NET连接数据库并获取数据方法.分享给大家供大家参考,具体如下: *连接对象的用法SqlConnection,SqlCommand,SqlDataAdapter *数据访问方式的写法 1.获取数据: //引用这两个命名空间 using System.Data.SqlClient; using System.Data; // 初始化连接对象 SqlConnection conn = new SqlConnection(); conn.ConnectionString = "U

  • python数据库操作常用功能使用详解(创建表/插入数据/获取数据)

    实例1.取得MYSQL版本 复制代码 代码如下: # -*- coding: UTF-8 -*-#安装MYSQL DB for pythonimport MySQLdb as mdbcon = Nonetry:    #连接mysql的方法:connect('ip','user','password','dbname')    con = mdb.connect('localhost', 'root',        'root', 'test');    #所有的查询,都在连接con的一个模块

  • ASP.NET中实现获取调用方法名

    本文实例讲述了ASP.NET中实现获取调用方法名的技巧.分享给大家供大家参考.具体实现方法如下: 在写记录日志功能时,需要记录日志调用方所在的模块名.命名空间名.类名以及方法名,想到使用的是反射(涉及到反射请注意性能),但具体是哪一块儿还不了解,于是搜索,整理如下: 需要添加相应的命名空间: 复制代码 代码如下: using System; using System.Diagnostics; using System.Reflection; 如果仅是获取当前方法名,可以使用如下代码: 复制代码

  • asp.net实现导出DataTable数据到Word或者Excel的方法

    本文实例讲述了asp.net实现导出DataTable数据到Word或者Excel的方法.分享给大家供大家参考,具体如下: /// <summary>< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> /// 导出DataTable数据到Word或者Excel /// </summary> /// <param name=&q

  • php从数据库中获取数据用ajax传送到前台的方法

    1.数据库的字段: 2.php连接数据库获取数据库的信息放入json_encode($css);{文件为:db.php} <span style="font-size:14px;"><?php $host="localhost"; $username="root"; $password="root"; $dbName="baixing"; $port=3306; $conn=new mys

  • ASP.NET Core MVC获取请求的参数方法示例

    前言 一次HTTP请求,就是一次标准IO操作.请求是I,是输入:响应式O,是输出.任何web开发框架,其实都是在干这两件事: 接受请求并进行解析获取参数 根据参数进行渲染并输出响应内容 所以我们学习一个框架,我认为最首要的是知道如何从请求中获取参数.http请求携带参数的地方主要有下面几个地方: URL Header Body 下面看看ASP.NET Core是如何从这几个位置获取参数的. 通过URL获取参数 通过URL传参是HTTP最最常用的办法.这里简单介绍下URL相关的知识.一个URL主要

  • 在ASP.NET Core中应用HttpClient获取数据和内容

    在本文中,我们将学习如何在ASP.NET Core中集成和使用HttpClient.在学习不同HttpClient功能的同时使用Web API的资源.如何从Web API获取数据,以及如何直接使用HttpRequestMessage类来实现这些功能.在以后的文章中,我们将学习如何发送POST.PUT和DELETE请求,以及如何使用HttpClient发送PATCH请求. 要下载源代码,可以访问https://github.com/CodeMazeBlog/httpclient-aspnetcor

  • 详解vue 中使用 AJAX获取数据的方法

    在VUE开发时,数据可以使用jquery和vue-resource来获取数据.在获取数据时,一定需要给一个数据初始值. 看下例: <script type="text/javascript"> new Vue({ el:'#app', data:{data:""}, created:function(){ var url="json.jsp"; var _self=this; $.get(url,function(data){ _se

  • java 结合jQuery实现跨域名获取数据的方法

    一.什么是跨域? 由于浏览器出于安全的考虑,采取了同源策略的限制,使得jQuery无法直接跨域名互相操作对象或数据.例如:a.com 域名下的 a.html页面利用jQuery无法操作b.com 域名下b.html页面的对象或是数据, 并且默认情况下也不能操作test.a.com域名下的 test.html的 对象或是数据 .只要满足下面条件的jQuery都会视为跨域名: 1.主域相同,子域不同,如xxx.aaa.com和yyy.aaa.com 2.域名相同,端口不同,如xxx.aaa.com:

  • 页面向下滚动ajax获取数据的实现方法(兼容手机)

    页面向下滚动ajax获取数据的实现方法(兼容手机) $(window).scroll(function () { var scrollTop = $(this).scrollTop(); var scrollHeight = $(document).height(); var windowHeight = $(this).height(); if (scrollTop + windowHeight >= scrollHeight) { loadPromotions(); } }); var pa

随机推荐