net数据库类库
① 数据库中.net是什么.net对数据库有什么作用
我来说说吧
首先,.net不是一种语言,不是一种技术,而是一个平台。所谓平台,就是说在.net框架下编译出来的程序,并不是直接针对windows系统API的,而是针对.net平台的。就好像人说话,以前要说“把刀拿起来,刃放到面包上,往下用力”,现在只要说“用刀切面包”就可以了。.net平台就负责把“用刀切面包”解释成它的完整意义,交给系统去执行。它的好处是:有一个强大的类库,代替开发者做了很多底层的事情,使得开发更快捷、容易,使得应用的调整更加快速,也使安全性得到较大提升(很多安全方面的问题都由类库的开发者替应用层开发者做了)。
.net平台下可以用很多种语言来编程,比如vb.net C# F# VC++.net,各种新的语言还在不断被开发出来,不管你用什么语言,编译出来的程序都不能在系统中直接运行,而是被编译成一种中间语言(IL)程序,这个中间语言程序通过.net解释器解释为本地代码执行。
数据库与.net的关系有两种含义:一是在.net类库中,有System.Data等命名空间,在使用.net编程时,通过调用这些命名空间的方法、函数等,可以方便地在你的应用程序、网站中操作数据库;二是sql Server等数据库提供了.net编程支持。你可以用.net来编写以往只能由T-SQL语言来写的存储过程等等。
② .NET里怎么写数据库连接的类库
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace GameCard.DBUtility
{
public static class DBHelperSqlServer
{
private static SqlConnection connection;
/// <summary>
/// Connection 连接
/// </summary>
public static SqlConnection Connection
{
get
{
//读取 配置 文件
string connectionString = ConfigurationManager.ConnectionStrings["sqlserver"].ConnectionString;
//没有这个链接
if (connection == null)
{
//新的连接
connection = new SqlConnection(connectionString);
//打开
connection.Open();
}
//链接被关闭中
else if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
//链接在休眠中
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}
/// <summary>
/// (删,改)
/// </summary>
/// <param name="safeSql">SQL语句</param>
/// <returns>受影响的行数</returns>
public static int ExecuteCommand(string safeSql)
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
return cmd.ExecuteNonQuery();
}
/// <summary>
/// (删,改)
/// </summary>
/// <param name="safeSql">SQL语句</param>
/// <param name="values">SqlParameter[]</param>
/// <returns>受影响的行数</returns>
public static int ExecuteCommand(string sql, params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand(sql, Connection);
cmd.Parameters.AddRange(values);
return cmd.ExecuteNonQuery();
}
/// <summary>
/// (增)
/// </summary>
/// <param name="safeSql">SQL语句</param>
/// <returns>当前行,第一列值</returns>
public static object GetScalar(string safeSql)
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
return cmd.ExecuteScalar();
}
/// <summary>
/// (增)
/// </summary>
/// <param name="safeSql">SQL语句</param>
/// <param name="values">SqlParameter[]</param>
/// <returns>当前行,第一列值</returns>
public static object GetScalar(string sql, params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand(sql, Connection);
cmd.Parameters.AddRange(values);
return cmd.ExecuteScalar();
}
/// <summary>
/// DataReader (查)
/// </summary>
/// <param name="safeSql">SQL语句</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader GetReader(string safeSql)
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
SqlDataReader reader = cmd.ExecuteReader();
return reader;
}
/// <summary>
/// DataReader (查)
/// </summary>
/// <param name="safeSql">SQL语句</param>
/// <param name="values">SqlParameter[]</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader GetReader(string sql, params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand(sql, Connection);
cmd.Parameters.AddRange(values);
SqlDataReader reader = cmd.ExecuteReader();
return reader;
}
/// <summary>
/// DataTable (查)
/// </summary>
/// <param name="safeSql">SQL语句</param>
/// <returns>DataTable</returns>
public static DataTable GetDataSet(string safeSql)
{
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand(safeSql, Connection);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
return ds.Tables[0];
}
/// <summary>
/// DataTable (查)
/// </summary>
/// <param name="safeSql">SQL语句</param>
/// <param name="values">SqlParameter[]</param>
/// <returns>DataTable</returns>
public static DataTable GetDataSet(string sql, params SqlParameter[] values)
{
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand(sql, Connection);
cmd.Parameters.AddRange(values);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
return ds.Tables[0];
}
/// <summary>
/// 输入
/// </summary>
/// <param name="paraName">参数</param>
/// <param name="type">类型</param>
/// <param name="size">大小</param>
/// <param name="values">值</param>
/// <returns>SqlParameter</returns>
public static SqlParameter MakeInParameter(string paraName, SqlDbType type, int size, object values)
{
return MakeParam(paraName, (SqlDbType)type, size, ParameterDirection.Input, values);
}
/// <summary>
/// 输出
/// </summary>
/// <param name="paraName">参数</param>
/// <param name="type">类型</param>
/// <param name="size">大小</param>
/// <param name="values">值</param>
/// <returns>SqlParameter</returns>
public static SqlParameter MakeOutParameter(string paraName, SqlDbType type, int size)
{
return MakeParam(paraName, (SqlDbType)type, size, ParameterDirection.Output, null);
}
private static SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
{
SqlParameter param;
if (Size > 0)
{
param = new SqlParameter(ParamName, DbType, Size);
}
else
{
param = new SqlParameter(ParamName, DbType);
}
param.Direction = Direction;
if (!(Direction == ParameterDirection.Output && Value == null))
{
param.Value = Value;
}
return param;
}
}
}
③ 帮忙贴一个asp.net数据库连接操作的类库。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Collections;
using System.Data.SqlClient;
//编号2
/**//// <summary>
/// 数据库的通用访问代码
/// 此类为抽象类,不允许实例化,在应用时直接调用即可
/// </summary>
public abstract class SqlHelper
...{
//获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改
//编号13
public static readonly string =
ConfigurationManager.ConnectionStrings["connstring"].ConnectionString;
// 哈希表用来存储缓存的参数信息,哈希表可以存储任意类型的参数
//编号8
private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());//编号9
/**//// <summary>
///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
/// 使用参数数组形式提供参数列表
/// </summary>
/// <remarks>
/// 使用示例:
/// int result = ExecuteNonQuery(connString, CommandType.StoredProcere,
/// "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connectionString">一个有效的数据库连接字符串</param>
/// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
/// </param>
/// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
/// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表
/// </param>
/// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
//编号3
public static int ExecuteNonQuery(string connectionString, CommandType cmdType,
string cmdText, params SqlParameter[] commandParameters)
...{
SqlCommand cmd = new SqlCommand();
//编号4
using (SqlConnection conn = new SqlConnection(connectionString))
...{
//通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
//清空SqlCommand中的参数列表
cmd.Parameters.Clear();
//编号14
return val;
}
} /**//// <summary>
///执行一条不返回结果的SqlCommand,通过一个已经存在的数据库连接
/// 使用参数数组提供参数
/// </summary>
/// <remarks>
/// 使用示例:
/// int result = ExecuteNonQuery(conn, CommandType.StoredProcere,
/// "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="conn">一个现有的数据库连接</param>
/// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
/// </param>
/// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
/// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表
/// </param>
/// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
//编号5
public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
...{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
/**//// <summary>
/// 执行一条不返回结果的SqlCommand,通过一个已经存在的数据库事物处理
/// 使用参数数组提供参数
/// </summary>
/// <remarks>
/// 使用示例:
/// int result = ExecuteNonQuery(trans, CommandType.StoredProcere,
/// "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="trans">一个存在的 sql 事物处理</param>
/// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
/// </param>
/// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
/// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表
/// </param>
/// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
//编号12
public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType,string cmdText, params SqlParameter[] commandParameters)
...{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
/**//// <summary>
/// 执行一条返回结果集的SqlCommand命令,通过专用的连接字符串。
/// 使用参数数组提供参数
/// </summary>
/// <remarks>
/// 使用示例:
/// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcere,
/// "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connectionString">一个有效的数据库连接字符串</param>
/// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
/// </param>
/// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
/// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表
/// </param>
/// <returns>返回一个包含结果的SqlDataReader</returns>
public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
...{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString);
// 在这里使用try/catch处理是因为如果方法出现异常,则SqlDataReader就不存在,
//CommandBehavior.CloseConnection的语句就不会执行,触发的异常由catch捕获。
//关闭数据库连接,并通过throw再次引发捕捉到的异常。
try
...{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
...{
conn.Close();
throw; //编号7
}
}
/**//// <summary>
/// 执行一条返回第一条记录第一列的SqlCommand命令,通过专用的连接字符串。
/// 使用参数数组提供参数
/// </summary>
/// <remarks>
/// 使用示例:
/// Object obj = ExecuteScalar(connString, CommandType.StoredProcere,
/// "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connectionString">一个有效的数据库连接字符串</param>
/// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
/// </param>
/// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
/// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表
/// </param>
/// <returns>返回一个object类型的数据,可以通过 Convert.To{Type}方法转换类型</returns>
public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
...{
SqlCommand cmd = new SqlCommand();
using (SqlConnection connection = new SqlConnection(connectionString))
...{
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}
/**//// <summary>
/// 执行一条返回第一条记录第一列的SqlCommand命令,通过已经存在的数据库连接。
/// 使用参数数组提供参数
/// </summary>
/// <remarks>
/// 使用示例:
/// Object obj = ExecuteScalar(connString, CommandType.StoredProcere,
/// "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="conn">一个已经存在的数据库连接</param>
/// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
/// </param>
/// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
/// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表
/// </param>
/// <returns>返回一个object类型的数据,可以通过 Convert.To{Type}方法转换类型
/// </returns>
public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
...{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
/**//// <summary>
/// 缓存参数数组
/// </summary>
/// <param name="cacheKey">参数缓存的键值</param>
/// <param name="cmdParms">被缓存的参数列表</param>
public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
...{
//编号10
parmCache[cacheKey] = commandParameters;
}
/**//// <summary>
/// 获取被缓存的参数
/// </summary>
/// <param name="cacheKey">用于查找参数的KEY值</param>
/// <returns>返回缓存的参数数组</returns>
public static SqlParameter[] GetCachedParameters(string cacheKey)
...{
SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
if (cachedParms == null)
return null;
//新建一个参数的克隆列表
SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
//通过循环为克隆参数列表赋值
for (int i = 0, j = cachedParms.Length; i < j; i++)
//使用clone方法复制参数列表中的参数
//编号11
clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
return clonedParms;
}
/**//// <summary>
/// 为执行命令准备参数
/// </summary>
/// <param name="cmd">SqlCommand 命令</param>
/// <param name="conn">已经存在的数据库连接</param>
/// <param name="trans">数据库事物处理</param>
/// <param name="cmdType">SqlCommand命令类型 (存储过程,T-SQL语句,等等。) </param>
/// <param name="cmdText">Command text,T-SQL语句 例如 Select * from
/// Procts</param>
/// <param name="cmdParms">返回带参数的命令</param>
//编号6
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn,SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[]
cmdParms)
...{
//判断数据库连接状态
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
//判断是否需要事物处理
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null)
...{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
}
④ .net框架主要是哪几部分组成
.NET开发框架的几个主要组成部分:首先是整个开发框架的基础,即通用语言运行时以及它所提供的一组基础类库;在开发技术方面,.NET提供了全新的数据库访问技术ADO .NET,以及网络应用开发技术ASP .NET和Windows编程技术Win Forms;在开发语言方面,.NET提供了VB,VC++,C#, Jscript等多种语言支持;而Visual Studio .NET则是全面支持.NET的开发工具。下面就让我们来一步步的来了解它们:
通用语言运行时,即Common Language Runtime 。Microsoft .NET 给开发人员带来了一种全新的开发框架,而通用语言运行时则处于这个框架的最低层,是这个框架的基础。开发人员对于所谓的C运行时、VB运行时、Jave虚拟机这些概念已经非常熟悉了,而通用语言运行时则为多种语言提供了一种统一的运行环境。另外它还提供了更多的功能和特性,比如统一和简化的编程模型,用户不必迷惑于Win32 API和COM;避免了DLL的版本和更新问题(常称为DLL地狱),从而大大简化了应用程序的发布和升级;多种语言之间的交互,例如我们甚至可以在VB中使用C++编写的类;自动的内存和资源管理等等。Microsoft .NET正是基于通用语言运行时,实现了这些开发人员梦寐以求的功能。
基于通用语言运行时开发的代码称为受控代码,它的运行步骤大体如下:首先使用一种通用语言运行时支持的编程语言编写源代码,然后使用针对通用语言运行时的编译器生成独立于机器的微软中间语言(Microsoft Intermediate Language),同时产生运行所需的元数据,在代码运行时再使用即时编译器(Just In Time Compiler)生成相应的机器代码来执行。
当然对于开发者而言,他们除了关心通用语言运行时提供那么多新特性外,它究竟给开发者提供了什么样的编程接口,这就是基础类库(Base Class Library)。这组基础类库包括了从输入输出到数据访问等各方面,提供了一个统一的面向对象的、层次化的、可扩展的编程接口。它使用一种点号分隔的方法,使得查找和使用类库非常容易。例如基础类库中的根,它的命名空间是System,提供数据访问的类库的命名空间是System.Data。在使用时,开发者只需在自己的应用中添加所需的基础类库的引用,然后就可以使用这个类库中的所有方法、属性等等。跟传统的Windows编程相比,使用和扩展基础类库都非常容易,这使得开发者能够高效、快速的构建基于下一代互联网的网络应用。
几乎所有的应用程序都需要访问从简单的文本文件到大型的关系型数据库等各种不同类型的数据 。在Microsoft .NET中访问数据库的技术是ADO .NET。ADO .NET提供了一组用来连接到数据库,运行命令,返回记录集的类库,与从前的ADO(ActiveX Data Object)相比,Connection和Command对象很类似,而ADO .NET的革新主要体现在如下几个方面:
首先,ADO .NET提供了对XML的强大支持,这也是ADO .NET的一个主要设计目标。在ADO .NET中通过XMLReader,XMLWriter, XMLNavigator, XMLDocument等可以方便的创建和使用XML数据,并且支持W3C 的 XSLT、DTD、XDR等标准。ADO .NET对XML的支持也为XML成为Microsoft .NET中数据交换的统一格式提供了基础。
其次,ADO .NET引入了DataSet的概念,这是一个驻于内存的数据缓冲区,它提供了数据的关系型视图。不管数据来源于一个关系型的数据库,还是来源于一个XML文档,我们都可以用一个统一的编程模型来创建和使用它。它替代了原有的Recordset的对象,提高了程序的交互性和可扩展性,尤其适合于分布式的应用场合。
另外,ADO .NET中还引入了一些新的对象,例如DataReader可以用来高效率的读取数据,产生一个只读的记录集等等。简而言之,ADO .NET通过一系列新的对象和编程模型,并与XML紧密结合,使得在Microsoft .NET中的数据操作十分方便和高效。 ASP .NET是Microsoft .NET中的网络编程结构,它使得建造、运行和发布网络应用非常方便和高效 。我们可以从以下几个方面来了解ASP .NET:
1. ASP .NET网络表单
ASP .NET网络表单的设计目的就是使得开发者能够非常容易的创建网络表单,它把VB中的快速开发模型引入到网络开发中来,从而大大简化了网络应用的开发。具体的说:在ASP .NET中可以支持多种语言,不仅仅支持脚本语言,通用语言运行时支持的所有语言在ASP .NET中都可以使用;代码和内容分开,在现在的ASP(Active Server Pages)开发中,内容和脚本交错,维护和升级很困难,将他们分开可以使得开发人员和设计人员能够更好的分工合作,提高开发效率;另外在ASP .NET中通过引入服务器端控件,将类似VB的快速开发应用到了网络开发中来,这样大大提高了构建网络表单效率,并且服务器端控件是可扩展的,开发者可以建造自己需要的的服务器端控件。
2. ASP .NET网络服务
网络服务(Web Service)是下一代可编程网络的核心,它实际上就是一个可命名的网络资源,可用来在Internet 范围内方便的表现和使用对象,就像使用今天的 COM对象一样,不同的是使用和表现网络服务是通过SOAP(简单对象访问协议)甚至HTTP来实现的。在ASP .NET中,建造和使用网络服务都非常方便:
在ASP .NET中建造网络服务就是编写一个后缀为.ASMX的文件,在这个文件中加入想要表现出来的方法就可以了,网络服务的建造者不需要了解SOAP,XML的细节,只需要把精力集中在自己的服务本身,这也为独立软件服务开发商提供了很好的机会;使用网络服务最简单的方式就是使用HTTP协议(HTTP GET 或HTTP POST),用户只需要直接访问网络服务(.ASMX文件)的URL即可;当然用户还可以通过SOAP在自己的应用中更灵活的使用网络服务。
3. ASP .NET应用框架
ASP .NET应用不再是解释脚本,而是编译运行,再加上灵活的缓冲技术,从根本上提高了性能;由于ASP .NET的应用框架基于通用语言运行时,发布一个网络应用,仅仅是一个拷贝文件的过程,即使是组件的发布也是如此,更新和删除网络应用,可以直接替换/删除文件;开发者可以将应用的配置信息存放XML格式的文件中,管理员和开发者对应用程序的管理可以分开进行;提供了更多样的认证和安全管理方式;在可靠性等多方面都有很大提高。
传统的基于Windows的应用(Win Forms),它仍然是Microsoft .NET战略中不可或缺的一部分。在Microsoft .NET中开发传统的基于Windows的应用程序时,除了可以利用现有的技术例如ActiveX控件以及丰富的Windows接口外,还可以基于通用语言运行时开发,可以使用ADO .NET、网络服务等,这样也可以实现诸如避免DLL地狱、多语言支持等.NET的新特性。从上面的介绍中我们已经知道Microsoft .NET开发框架支持多种语言,在目前的测试版中已经支持 VB,C++,C#和Jscript四种语言以及它们之间的深层次交互
。而且微软支持第三方生产针对Microsoft .NET的编译器和开发工具,这也就是说几乎所有市场上的编程语言都有可能应用于Microsoft .NET开发框架。这样开发者可以任意选择自己喜爱的语言,这种开放和交互的特性正是开发者所热爱的。
需要特别指出的是,微软在Microsoft .NET中推出了全新的C#语言,这种全新的面向对象的语言使得开发者可以快速的构建从底层系统级到高层商业组件的不同应用。C#在保证了强大的功能和灵活性的同时,给C和C++带来了类似于VB的快速开发,并且它还针对.NET作了特别设计,比如C#允许XML数据直接映射为它的数据类型等等,这些特性结合起来使得C#成为优秀的下一代网络编程语言。
与此同时Microsoft .NET对原有的VB和C++也做了很大的改进,使得它们更加适应Microsoft .NET开发框架的需求。例如在Visual Basic .NET中增加了继承等面向对象的特性,结构化的出错处理等等;可管理的C++扩展,大大提高了利用C++来开发Microsoft .NET应用的效率等。
Visual Studio .NET作为微软的下一代开发工具,它和.NET 开发框架紧密结合,是构建下一代互联网应用的优秀工具,目前已经有Beta测试版面世。Visual Studio .NET通过提供一个统一的集成开发环境及工具,大大提高了开发者的效率;集成了多种语言支持;简化了服务器端的开发;提供了高效地创建和使用网络服务的方法等等。 .NET框架的一个主要目的是使COM开发变得更加容易
。COM开发过程中最难的一件事是处理COM基本结构。因此,为了简化COM开发,.NET框架实际上已自动处理了所有在开发人员看来是与“COM”紧密相关的任务,包括引用计算、接口描述以及注册。 必须认识到,这并不意味着.NET框架组件不是COM组件。事实上,使用Visual Studio 6.0的COM开发人员可以调用.NET框架组件,并且在他们看来,后者更像是拥有iUnknown数据的COM组件。相反,使用Visual Studio.NET的.NET框架开发人员则将COM组件视作.NET框架组件。
为了避免引起误解,这里需对这种关系加以特别说明:COM开发人员必须手动去做大多数.NET框架开发人员可以在运行时自动执行的事情。例如,必须手写COM组件的安全性模块,且无法自动管理模块占用的内存,而在安装COM组件时,注册条目必须放进Windows注册表中。对.NET框架而言,运行时实现了这些功能的自动化。例如,组件本身是自我描述型的,因而无需注册到Windows注册表中便能安装。
当把COM与Microsoft事务服务器(MTS)和分布式COM(DCOM)结合在一起时,就变成了COM+。COM+提供了一组面向中间层的服务。特别是COM+提供了进程管理功能和数据库与对象连接池处理功能。在将来的版本中,它还将提供一种称为分区的功能——专门为应用程序服务提供商设计的更强大的进程隔离功能。
COM+服务主要面向中间层应用程序开发,并主要为大型分布式应用程序提供可靠性和可扩展性。这些服务是对.NET框架所提供服务的补充;通过.NET框架类,可以直接访问这些服务。 .NET框架有几个要素值得一提
。首先是它的安全系统和配置系统。这两个系统协同工作,有力地遏止了运行不安全代码的可能性,并大幅度减少了号称“DLL Hell”的对应用程序进行配置时所面临的挑战。
安全系统是一个高度细化、基于事实的系统,它赋予开发人员和管理员多种代码处理权限(而不仅仅是“on”或“off”)。将来,还会根据代码本身的核心要素来决定如何实施上述权限。
例如,当.NET框架应用程序被下载到某一系统中时,它会申请一组权限(诸如对临时目录的写入权限)。运行时将收集有关应用程序的事实信息(诸如:它是从何处下载的、是否用了有效签名、甚至它访问系统的准确程度),并按管理策略决定是否允许应用程序运行。运行时甚至还可告之应用程序它无法授权申请的所有权限,并允许应用程序自行决定是否继续运行。
有这种安全系统作保障,许多应用程序配置问题便会迎刃而解。开发人员和管理员(最终是用户)所面临的最大挑战之一是版本的管理问题。如果在您新装了某个应用程序之后,一切都限于瘫痪状态,而在这之前系统一直运行得非常良好,那么最大的可能是新安装的应用程序重写了一些共享库,并极有可能修正了现有应用程序正使用的程序错误。这种情况出现的频率很高,以致人们将它称为:“DLL Hell”。
.NET框架拥有的几项高级功能可以彻底消除“DLL Hell”现象。首先,它有一个非常强大的内部命名系统,能够有效地防止两个库因互相重名而被错当为对方的情况发生。除此之外,它还提供一项被称作“并行”配置的新功能。如果前例中新安装的应用程序确实重写了共享库,现有应用程序可对该库进行修复。等现有应用程序再次启动时,它会检查所有的共享文件。如果发现文件被更改,同时这些更改又是不兼容的,则它可以请求运行时提取一个它可以使用的版本。得益于强大的安全系统,运行时可以安全地执行该操作,这样应用程序就完成了本身的修复工作。
总之,Microsoft .NET开发框架在通用语言运行时的基础上,给开发者提供了完善的基础类库、下一代的数据库访问技术ADO .NET、网络开发技术ASP .NET,开发者可以使用多种语言及Visual Studio .NET来快速构建下一代的网络应用。随着相关的互联网标准及技术的普及,可以预言将会有越来越多的开发者采用这种开发结构,开发出丰富多样的下一代互联网应用来。
⑤ .net是什么
.net是国际最广泛流行的通用域名格式。一般用于从事Internet相关的网络服务的机构或公司,是建立全球商业品牌,国际化形象的第一选择。
.NET是MicrosoftXMLWebservices平台。XMLWebservices允许应用程序通过Internet进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。
Microsoft.NET平台提供创建XMLWebservices并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。
(5)net数据库类库扩展阅读:
WWW站点数(包括.CN、.COM、.NET、.ORG下的网站)。
一、WWW站点总数为:约668900个。
二、按所属域名类别划分:
1、WWW站点总数为:约668900个。
2、按所属域名类别划分:
1、AC数量365,百分比0.1%。
2、COM数量476682,百分比71.3%。
3、EDU略。
4、GOV数量10260,百分比1.5%。
5、NET数量79725,百分比11.9%。
6、ORG数量22204,百分比3.3%。
7、行政区域名.CN数量2878,百分比0.4%。
8、.CN数量76786,百分比11.5%。
⑥ 什么是.net 基础类库
.NET Framework 类库由命名空间组成。每个命名空间都包含可在程序中使用的类型:类、结构、枚举、委托和接口。
⑦ .net 类库是什么
class library(类库) 程序员用来实现各种功能的类的集合。
.net类库 指的就是.net平台所用语言实现各种功能的类的集合啊