aspnet数据库操作类
❶ 在asp.net中JS怎样操作数据库
最好别使用js操作数据库,js在源代码里面可以看到,别人不就知道你的数据库信息了?还可以通过注入操作你的数据库 如果最实在想用,参考例子 文件构成:
Access数据库名为 MyData.Mdb, 里面建了一个名为count的表,表由两个字段组成: ID和COUNT,表里有一条数据: ('count','100')。 文本文件名为 count.txt,里面随便写入一个数字。 静态页面名为Cnt.htm。
以上3个文件都放在同一目录下。
由于采用Access数据库,而它采用非标准sql语法,所以要注意在表名和字段名上需要加方括号: []
下面是页面里的代码:
其中getCountFromDB方法是对Access数据库进行操作,getCountFromTxt方法是对txt纯文本进行操作,这两个方法都在本地执行通过。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<SCRIPT LANGUAGE="javaScript">
<!--
function getCountFromDB() {
//以当前页面文件为基础,找到文件所在的绝对路径。
var filePath = location.href.substring(0, location.href.indexOf("Cnt.htm"));
var path = filePath + "MyData.mdb";
//去掉字符串中最前面的"files://"这8个字符。
path = path.substring(8);
var updateCnt = 0;
//生成查询和更新用的sql语句。
var sqlSelCnt = "SELECT COUNT FROM [COUNT] WHERE ID = 'count'";
var sqlUpdCnt = "UPDATE [COUNT] SET [COUNT] = '";
//建立连接,并生成相关字符串 www.knowsky.com。
var con = new ActiveXObject("ADODB.Connection");
con.Provider = "Microsoft.Jet.OLEDB.4.0";
con.ConnectionString = "Data Source=" + path;
con.open;
var rs = new ActiveXObject("ADODB.Recordset");
rs.open(sqlSelCnt, con);
while (!rs.eof) {
var cnt = rs.Fields("COUNT");
document.write(cnt);
//将取得结果加1后更新数据库。
updateCnt = cnt * 1 + 1;
rs.moveNext;
}
rs.close();
rs = null;
sqlUpdCnt = sqlUpdCnt + updateCnt + "'";
con.execute(sqlUpdCnt);
con.close();
con = null;
}
function getCountFromTxt() {
var filePath = location.href.substring(0, location.href.indexOf("Cnt.htm"));
var path = filePath + "count.txt";
path = path.substring(8);
var nextCnt = 0;
var fso, f1, ts, s;
//以只读方式打开文本文件。
var ForReading = 1;
//以读写方式打开文本文件。
var ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.GetFile(path);
ts = f1.OpenAsTextStream(ForReading, true);
s = ts.ReadLine();
nextCnt = eval(s) + 1;
document.write("now count is :" + s);
ts.Close();
ts = f1.OpenAsTextStream(ForWriting, true);
ts.WriteLine(nextCnt);
ts.close();
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
getCountFromTxt();
//-->
</SCRIPT>
</BODY>
</HTML>
后记:虽然在只支持静态页面的免费空间不可用,但是我想一些支持Asp的免费空间应该能用,当然我没有具体试过,只是凭自己想象。并且用这种方法来读写数据库,只适合做计数器和留言版这样的不需要保密性的工作,毕竟代码全是用javascript写成的,谁都可以看到,然后就可以得到路径把db文件下载下来进行分析,所以没办法用它来保存一些不想让别人知道的东西。就像我一个同事说的,用javascript连接数据库进行操作,简直就是霸王硬上弓,呵呵,的确如此,既然不能用在免费空间上作自己的计数器,那这段代码就只能用来玩玩,自己找找良好感觉了。收集:
简单的数据库操作:<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<script language=javascript>
function connectDb()
{
var ConnDB = new ActiveXObject("ADODB.Connection");
ConnDB.ConnectionString="dsn=shbxdatabase;uid=ldbx;pwd=123456;";
ConnDB.Open();
var Rs = new ActiveXObject("ADODB.Recordset");
var tempstr="";
Rs.Open("select * from WDA1",ConnDB,1,3);
while(!Rs.EOF)
{
tempstr = tempstr + Rs("TNAME") + "<br/>";
Rs.MoveNext;
}
test.innerHTML=tempstr;
}
</script>
</HEAD>
<BODY onbeforeunload="return 'ok?'"><P><div id=test> </div>
<P><INPUT id=button1 type=button value=显示 name=button1 onclick="connectDb()"></BODY>
</HTML>
>>>>>>-------------------------------------var db="D:\\js\\9t\\db1.mdb";
function opendb(dbname,sql)
{
var opendb =new ActiveXObject("ADODB.Recordset")
opendb.ActiveConnection = "DBQ="+dbname+";DRIVER={Microsoft Access Driver (*.mdb)};"
opendb.Source = sql
opendb.CursorType = 1
opendb.CursorLocation = 2
opendb.LockType = 3
opendb.Open()
return opendb
}
var rs=new Object();
rs=opendb(db,"select * from 产品 where id="+i);
document.all.xx1.innerHTML=rs("生产厂商").value;
document.all.xx2.innerHTML=rs("产品名称")+"/"+rs("型号");
document.all.xx3.innerHTML=rs("售价");
document.all.xx4.innerHTML=rs("批发");
document.all.xx5.innerHTML=rs("备注");
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<---------------------------------------
连接ACCESS只能用数据源,操作数据库的方法跟ASP之类是一样的。
只不过执行的语句不一样罢了。
如:
String dbUrl = "sun.jdbc.odbc.JdbcOdbcDriver";
String dbConStr = "jdbc:odbc:dnsName";
Connection Conn = null;
Statement stmt = null;
try{
Class.forName(dbUrl);
}catch(ClassNotFoundException e){
System.err.println("Not Found ClassForName" + e.getMessage());
}
try{
Conn = DriverManager.getConnection(dbConStr, "uid", "pwd"); //连接数据库,uid与pwd分别为 用户名及密码(连接数据库的),如果没有既为空
stmt = Conn.createStatement();
}catch(Exception e){
System.err.println("Can't Connect the DATA" + e.getMessage());
}
//以下为操作数据库的
String sql = "select * from tableName[....]";
ResultSet Rs = stmt.executeQuery(sql); // 返回记录集
String sqlUpdate = "update...";
String sqlInsert = "insert into....";
stmt.executeUpdate(sqlUpdate); //更新记录
stmt.executeUpdate(sqlInsert); //插入记录
Conn.close();
stmt.close();
❷ 什么是数据库操作类
数据库操作类是自己写的一个类,主要功能是对数据库进行增删查改。
在其他地方调用这个类中的增删查改方法即可以操作数据库。
❸ C#中如何定义数据库操作类,并调用
以下是我编写的一个操作access数据库的类,其他数据库可以参考修改,原理差不多的。希望对你有帮助。
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Configuration;
using System.Data;
namespace AutoEmailSender
{
/// <summary>
/// 数据库交互类
/// </summary>
public class DB
{
/// <summary>
/// 获得数据库连接
/// </summary>
/// <returns></returns>
public static OleDbConnection GetDBConnection()
{
return new OleDbConnection(ConfigurationManager.AppSettings["ConnectString"]);
}
/// <summary>
/// 查询结果集
/// </summary>
/// <param name="sql">执行语句</param>
/// <returns>返回一个DataTable对象</returns>
public static DataTable ExecuteDataTable(string sql)
{
using (OleDbConnection con = GetDBConnection())
{
OleDbCommand cmd = new OleDbCommand(sql, con);
return ExecuteDataTable(cmd);
}
}
/// <summary>
/// 查询结果集
/// </summary>
/// <param name="cmd">执行语句的OleDbCommand命令</param>
/// <returns>返回一个DataTable对象</returns>
public static DataTable ExecuteDataTable(OleDbCommand cmd)
{
DataSet ds = new DataSet();
using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
{
try
{
da.Fill(ds);
}
catch (Exception e)
{
throw e;
}
}
if (ds.Tables.Count > 0)
{
ds.Tables[0].DefaultView.RowStateFilter = DataViewRowState.Unchanged | DataViewRowState.Added | DataViewRowState.ModifiedCurrent | DataViewRowState.Deleted;
return ds.Tables[0];
}
else
return null;
}
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// </summary>
/// <param name="sql">查询语句</param>
/// <returns>返回结果集中第一行的第一列的object值</returns>
public static object ExecuteScalar(string sql)
{
using (OleDbConnection con = GetDBConnection())
{
OleDbCommand cmd = new OleDbCommand(sql, con);
return ExecuteScalar(cmd);
}
}
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// </summary>
/// <param name="cmd">查询命令</param>
/// <returns>返回结果集中第一行的第一列的object值</returns>
public static object ExecuteScalar(OleDbCommand cmd)
{
try
{
cmd.Connection.Open();
object obj = cmd.ExecuteScalar();
cmd.Connection.Close();
return obj;
}
catch (Exception error)
{
cmd.Connection.Close();
throw error;
}
}
/// <summary>
/// 更新数据集
/// </summary>
/// <param name="dt">要更新的数据集</param>
/// <param name="insertCmd">插入SQL语句</param>
/// <param name="updateCmd">更新SQL语句</param>
/// <param name="deleteCmd">删除SQL语句</param>
/// <returns></returns>
public static int UpdateDataSet(DataTable dt, OleDbCommand insertCmd, OleDbCommand updateCmd, OleDbCommand deleteCmd)
{
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.InsertCommand = insertCmd;
da.UpdateCommand = updateCmd;
da.DeleteCommand = deleteCmd;
//da.UpdateBatchSize = 0; //UpdateBatchSize:指定可在一次批处理中执行的命令的数量,在Access不被支持。0:批大小没有限制。1:禁用批量更新。>1:更改是使用 UpdateBatchSize 操作的批处理一次性发送的。
da.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
da.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
da.DeleteCommand.UpdatedRowSource = UpdateRowSource.None;
try
{
int row = da.Update(dt);
return row;
}
catch (Exception e)
{
throw e;
}
}
}
/// <summary>
/// 返回一个查询语句执行结果的表结构
/// </summary>
/// <param name="sql">查询语句,不支持复杂SQL</param>
/// <returns></returns>
public static DataTable GetTableSchema(string sql)
{
sql = sql.ToUpper();
DataTable dt = null;
using (OleDbConnection con = GetDBConnection())
{
OleDbCommand cmd = new OleDbCommand(sql, con);
con.Open();
using (OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly | CommandBehavior.CloseConnection))
{
dt = dr.GetSchemaTable();
}
}
return dt;
}
/// <summary>
/// 根据输入的查询语句自动生成插入,更新,删除命令
/// </summary>
/// <param name="sql">查询语句</param>
/// <param name="insertCmd">插入命令</param>
/// <param name="updateCmd">更新命令</param>
/// <param name="deleteCmd">删除命令</param>
public static void GenerateUpdateSQL(string sql, OleDbCommand insertCmd, OleDbCommand updateCmd, OleDbCommand deleteCmd)
{
sql = sql.ToUpper();
DataTable dt = GetTableSchema(sql);
string tableName = dt.Rows[0]["BaseTableName"].ToString();
List<OleDbParameter> updatePrimarykeys = new List<OleDbParameter>();//主键参数集合
List<OleDbParameter> deletePrimarykeys = new List<OleDbParameter>();//主键参数集合,因为不能同时被OleDbCommand个命令引用,所以多申明一个
List<OleDbParameter> insertFields = new List<OleDbParameter>();//字段参数集合
List<OleDbParameter> updateFields = new List<OleDbParameter>();//字段参数集合
string columns = string.Empty, values = "", set = "", where = "";
foreach (DataRow dr in dt.Rows)
{
if (dr["IsAutoIncrement"].ToString().Equals("False"))
{
insertFields.Add(new OleDbParameter("@" + dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
dr["BaseColumnName"].ToString()));
updateFields.Add(new OleDbParameter("@" + dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
dr["BaseColumnName"].ToString()));
if (!string.IsNullOrEmpty(columns))
columns += ",";
columns += dr["BaseColumnName"].ToString();
if (!string.IsNullOrEmpty(values))
values += ",";
values += "@" + dr["BaseColumnName"].ToString();
if (!string.IsNullOrEmpty(set))
set += ",";
set += dr["BaseColumnName"].ToString() + "=@" + dr["BaseColumnName"].ToString();
}
if (dr["IsKey"].ToString().Equals("True"))
{
updatePrimarykeys.Add(new OleDbParameter("@OLD_" + dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
ParameterDirection.Input,
Convert.ToBoolean(dr["AllowDBNull"]),
Convert.ToByte(dr["NumericScale"]),
Convert.ToByte(dr["NumericPrecision"]),
dr["BaseColumnName"].ToString(), DataRowVersion.Original, null));
deletePrimarykeys.Add(new OleDbParameter("@OLD_" + dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
ParameterDirection.Input,
Convert.ToBoolean(dr["AllowDBNull"]),
Convert.ToByte(dr["NumericScale"]),
Convert.ToByte(dr["NumericPrecision"]),
dr["BaseColumnName"].ToString(), DataRowVersion.Original, null));
if (!string.IsNullOrEmpty(where))
where += " and ";
where += dr["BaseColumnName"].ToString() + "=@OLD_" + dr["BaseColumnName"].ToString();
}
}
insertCmd.CommandText = string.Format("insert into {0} ({1}) values ({2})", tableName, columns, values);
updateCmd.CommandText = string.Format("update {0} set {1} where {2}", tableName, set, where);
deleteCmd.CommandText = string.Format("delete from {0} where {1}", tableName, where);
insertCmd.Connection = GetDBConnection();
updateCmd.Connection = GetDBConnection();
deleteCmd.Connection = GetDBConnection();
foreach (OleDbParameter pa in insertFields)
{
insertCmd.Parameters.Add(pa);
}
foreach (OleDbParameter pa in updateFields)
{
updateCmd.Parameters.Add(pa);
}
foreach (OleDbParameter pa in updatePrimarykeys)
{
updateCmd.Parameters.Add(pa);
}
foreach (OleDbParameter pa in deletePrimarykeys)
{
deleteCmd.Parameters.Add(pa);
}
}
}
}
❹ ASPNET怎样调用一个存储过程(带参数的)
ASPNET怎样调用一个存储过程(带参数的)使用的是Ado.NET中的相关的数据库操作方法。
Ado.NET连接数据库有以下几个步骤:
1:使用配置的数据库连接串,创建数据库连接 Connection 对象
2:构建操作的sql语句
3:定义command对象
4:打开数据连接
5:执行命令
举一个例子,删除操作
public int DeleteStudent3(int stuID)
{
int result = 0;
using (SqlConnection connection = new SqlConnection(connString))
{
SqlCommand objCommand = new SqlCommand(dboOwner + ".usp_DeleteStudent", connection);
objCommand.CommandType = CommandType.StoredProcere;
objCommand.Parameters.Add("@stuID", SqlDbType.Int).Value = stuID;
connection.Open();
result = objCommand.ExecuteNonQuery();
}
return result;
}
❺ 请问一个asp,net的问题
我想通过例子你很快就会明白了:
<?xml version="1.0"?>
<!--
注意: 除了手动编辑此文件以外,您还可以使用
Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
“网站”->“Asp.Net 配置”选项。
设置和注释的完整列表在
machine.config.comments 中,该文件通常位于
\Windows\Microsoft.Net\Framework\v2.x\Config 中
-->
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings>
<add name="NorthwindConnectionString" connectionString="Data Source=8G4K5AU68FMJYV2\SQLEXPRESS;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=123456"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<anonymousIdentification enabled="true"/>
</system.web>
</configuration>
这个配置文件的内容很少,但是包括非常重要的一节:configuration ->connectionStrings>.请注意,Web.Config文件是以XML 格式存储的,因此里边的信息采用"树型结构",就那上面来看,<connectionStrings />存储于<configuration />结,因此<connectionStrings />就是<configuration />所要表述的成员之一,也就是说每一个结点都存储应用程序的一些信息,而它们都是用过XML 属性结构归类的.我们要实现ASP.NET的应用程序的灵活性,很大程度上依赖了这些配置文件.举一个简单的例子:当我们在.ASPX文件中连接数据源时,需要先定义连接字符串,但是一套完整的应用程序包括很多数据源,也包括很多连接数据源的代码,因此你必须考虑把这些连接字符串统一的管理,统一的调用,就像定义了一个"全局变量",随时随地,任何时间任何地点(程序集)都可以调用出来,当我们需要更改连接字符的时候,也只需要在"全局变量"中修改即可.呵呵,有没有发现这个ASP.NET中最令人兴奋的技术呢?那么你就试试吧,下面是间单的例子:
class OleDb
{
public static void ConnectionDleDb()
{
using (OleDbConnection conn = new OleDbConnection(GetConnSring()))
{
OleDbCommand command = conn.CreateCommand();
command.CommandText = GetCommandString();
try
{
conn.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.Write("/t{0}/t{1}",reader[0],reader[1]);
Console.WriteLine("/n");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
}
}
private static string GetConnSring()
{
ConnectionStringSettings settings =
ConfigurationManager.ConnectionStrings["NorthwindConnectionString"];
return (settings.ConnectionString);
}
private static string GetCommandString()
{
return (@"SELECT CategoryID, CategoryName FROM dbo.Categories;");
}
}
在这里,我们正好用到了Web.Config配置文件中的NorthwindConnectionString项,它存储了我们定义的一个连接字符串,在类OleDb中,方法GetConnSring使用ConfigurationManager类将Web.Config配置文件中的值取出,ConfigurationManager类则是.NET公开所的,提供给程序员的Web.Config文件操作类,在.NET类库中包含了很多实现类似功能的类,比如"成员资格提供程序","角色提供程序",它们与Web.Config配置文件配合组成了非常高效的应用程序管理机制.
以下是MSDN的相关文章:
---------------------------------------------------
使用 ASP.NET 配置系统的功能,可以配置整个服务器上的所有 ASP.NET 应用程序、单个 ASP.NET 应用程序、各个页面或应用程序子目录。可以配置各种功能,如身份验证模式、页缓存、编译器选项、自定义错误、调试和跟踪选项等等。
以下各节描述了 ASP.NET 配置系统的功能。
有关配置 .NET Framework 客户端应用程序的信息,请参见配置应用程序。
注意
ASP.NET 配置系统的功能仅适用于 ASP.NET 资源。例如,Forms 身份验证仅限制对 ASP.NET 文件的访问,而不限制对静态文件或 ASP(传统型)文件的访问,除非这些资源映射到 ASP.NET 文件扩展名。要配置非 ASP.NET 资源,应使用 Internet 信息服务 (IIS) 的配置功能。有关信息,请参见 Working with the IIS Metabase(使用 IIS 元数据库)和 IIS Metabase Property Reference(IIS 元数据库属性参考)。
配置文件
ASP.NET 配置数据存储在全部命名为 Web.config 的 XML 文本文件中,Web.config 文件可以出现在 ASP.NET 应用程序的多个目录中。使用这些文件,可以在将应用程序部署到服务器上之前、期间或之后方便地编辑配置数据。可以通过使用标准的文本编辑器、ASP.NET MMC 管理单元、网站管理工具或 ASP.NET 配置 API 来创建和编辑 ASP.NET 配置文件。
ASP.NET 配置文件将应用程序配置设置与应用程序代码分开。通过将配置数据与代码分开,可以方便地将设置与应用程序关联,在部署应用程序之后根据需要更改设置,以及扩展配置架构。
有关如何对 ASP.NET 配置文件中的数据进行组织的更多信息,请参见 ASP.NET 配置文件。ASP.NET 配置设置 中描述了可用的配置设置。
配置文件层次结构和继承
每个 Web.config 文件都将配置设置应用于它所在的目录以及它下面的所有子目录。可以选择用子目录中的设置重写或修改父目录中指定的设置。通过在 location 元素中指定一个路径,可以选择将 Web.config 文件中的配置设置应用于个别文件或子目录。
ASP.NET 配置层次结构的根为 systemroot\Microsoft.NET\Framework\versionNumber\CONFIG\Web.config 文件,该文件包括应用于所有运行某一具体版本的 .NET Framework 的 ASP.NET 应用程序的设置。由于每个 ASP.NET 应用程序都从根 Web.config 文件那里继承默认配置设置,因此只需为重写默认设置的设置创建 Web.config 文件。
注意
根 Web.config 文件从 Machine.config 文件那里继承一些基本配置设置,这两个文件位于同一个目录中。其中的某些设置不能在 Web.config 文件中被重写。有关更多信息,请参见 ASP.NET 配置文件层次结构和继承。
运行时,ASP.NET 使用 Web.config 文件按层次结构为传入的每个 URL 请求计算唯一的配置设置集合。这些设置只计算一次,随后将缓存在服务器上。ASP.NET 检测对配置文件进行的任何更改,然后自动将这些更改应用于受影响的应用程序,而且大多数情况下会重新启动应用程序。只要更改层次结构中的配置文件,就会自动计算并再次缓存分层配置设置。除非 processModel 节已更改,否则 IIS 服务器不必重新启动,所做的更改即会生效。
有关 ASP.NET 配置层次结构的工作原理的更多信息,请参见 ASP.NET 配置文件层次结构和继承和 ASP.NET 配置方案。
直接编辑配置文件
可以使用文本编辑器或 XML 编辑器来直接编辑配置文件。有关正确的语法,请参见 ASP.NET 配置设置和 常规配置设置 (ASP.NET) 中有关配置节的参考主题。有关更多信息,请参见编辑 ASP.NET 配置文件。
配置工具
使用 ASP.NET 配置系统所提供的工具来配置应用程序比使用文本编辑器简单,因为这些工具包括错误检测功能。
ASP.NET MMC 管理单元
用于 ASP.NET 的 Microsoft 管理控制台 (MMC) 管理单元提供一种在本地或远程 Web 服务器上的所有级别操作 ASP.NET 配置设置的方便途径。ASP.NET MMC 管理单元使用 ASP.NET 配置 API,但是它通过提供一个图形用户界面 (GUI) 来简化配置设置的编辑过程。另外,该工具还支持多个 ASP.NET 配置 API 功能,这些功能控制 Web 应用程序是否可以继承设置,并管理配置层次结构各级别之间的依赖性。
注意
若要使用 ASP.NET MMC 管理单元,必须使用具有管理权限的帐户登录到计算机。
ASP.NET MMC 管理单元在虚拟目录的属性页上显示为“ASP.NET”选项卡。
有关更多信息,请参见 ASP.NET MMC 管理单元。
网站管理工具
对网站具有管理权限的任何人都可以使用网站管理工具来管理该网站的配置设置。网站管理工具旨在为各个网站中最常用的配置设置提供一个用户友好的图形编辑工具。由于网站管理工具使用基于浏览器的界面,因此它允许您远程更改网站设置,这对于管理已经部署到成品 Web 服务器的站点(如承载的网站)非常有用。
网站管理工具与 ASP.NET MMC 管理单元在若干方面存在不同。例如,ASP.NET MMC 管理单元最适于管理员级别的配置,因为它提供对 Web 服务器上的整个配置文件层次结构的访问,而不是提供对单个网站的配置设置的访问。此外,您还必须是管理员才能使用 ASP.NET MMC 管理单元,而网站管理工具只允许各个网站所有者在他们具有管理权限的站点的根目录中配置 Web.config 文件。最后,您不能使用 ASP.NET MMC 管理单元来远程管理 IIS,但是,网站管理工具的浏览器界面允许远程配置 IIS 6.0 和更高版本的 IIS。
网站管理工具包括一个选项卡式界面,该界面在下列选项卡上对相关的配置设置进行分组:
“安全”选项卡,其中包含有助于保护 Web 应用程序资源并管理用户帐户和角色的设置。
“配置文件”选项卡,其中包含用来管理网站如何收集访问者信息的设置。
“应用程序”选项卡,其中包含用来管理影响 ASP.NET 应用程序的配置元素的设置。
“提供程序”选项卡,其中包含用来添加、编辑、删除、测试或分配应用程序提供程序的设置。
网站管理工具是随 .NET Framework 2.0 版自动安装的。有关该工具如何工作的信息,请参见 ASP.NET 网站管理工具。
命令行工具
.NET Framework 包括几个执行特定配置操作的命令行工具。例如,使用 Aspnet_regiis.exe 工具,可以指定将哪个版本的 .NET Framework 应用于 ASP.NET 应用程序。有关更多信息,请参见 .NET Framework 工具。
ASP.NET 配置 API
ASP.NET 配置系统提供一个完整的托管接口,使用该接口,可以通过编程方式配置 ASP.NET 应用程序,而不必直接编辑 XML 配置文件。另外,ASP.NET 配置 API 还执行下列任务:
通过为配置层次结构中所有级别的数据提供一个集成视图来简化管理任务。
支持部署任务,包括创建配置和用一个脚本配置多台计算机。
为构建 ASP.NET 应用程序、控制台应用程序和脚本、基于 Web 的管理工具和 MMC 管理单元的开发人员提供单一的编程接口。
防止开发人员和管理员进行无效的配置设置。
允许您扩展配置架构。您可以定义新配置参数并编写配置节处理程序以对它们进行处理。
提供从当前正在运行的应用程序获取配置信息的静态方法,以及从单独的应用程序获取配置信息的非静态方法。使用静态方法可以提高应用程序的运行速度,但是这些方法只能从您要获取其配置数据的应用程序内部使用。
有关更多信息,请参见 ASP.NET 配置 API。
配置安全性
ASP.NET 配置系统有助于防止未经授权的用户访问配置文件。ASP.NET 将 IIS 配置为拒绝任何浏览器访问 Machine.config 或 Web.config 文件。对于试图直接请求配置文件的任何浏览器,都返回 HTTP 访问错误 403(禁止)。
另外,将禁止一个 ASP.NET 应用程序中的配置文件访问其他 ASP.NET 应用程序中的配置设置,除非您的配置应用程序在完全信任模式下以对其他应用程序中的配置文件具有读取权限的帐户运行。
有关更多信息,请参见保证 ASP.NET 配置的安全和使用受保护的配置加密配置信息。
❻ ASP.NET入门教程 7.1 数据库
在开始学习ASPNET 数据控件之前 让我们先考虑一下数据源 数据大致上可以分为 类 关系型数据(relational data)根据范式规则组织成一系列的表 Microsoft Access Micrasoft SQL Server Oracle SAP DB 和MySQL中的数据都属于这种类型 第二种类型的数据以树型结构存储 例如XML文件 Windows注册表和Windows文件系统 最后一种类型数据的形式非常多 例如Excel文件 文本文件或私有格式 本教程(与绝大多数Web站点的数据交互一样)讨论关系型数据和XML文件
关系型数据库将信息分割到表(table)中 而表包含了记录(record 也称为行) 一条记录代表着表的主题的一个实例 每张表包含多个字段(field) 也称为列 它们按类型组织数据 例如 一张员工的表中可以包含每个员工的记录 该表的列可能是NameFirst NameLast DateOfHire等等 对于每条记录 每一列都有一个记录的值 大多数管理系统中的数据库由一组表组成 在Microsoft SQL Server中 一个或多个数据库一起形成服务器的一个实例 它也是本书中使用的数据库 一般情况下 表中只包含数据 怎样组织数据的描述信息 字段的名称以及各种限制都存放在数据库中一个称为元数据(metadata)的独立结构中
XML文件不同于关系型数据库 首先 它不是使用表 而是将数据存放在带有分支的树中 分支保存的数据越来越细化 每个数据集合以及单个数据都包含在节点中 例如 XML文件Employees中有一个Employees节点 表示树型结构的主干 接着对每个员工设置一个分支 在这个分支中将有FirstName LastName等分支 其次 XML文件是自描述的 因为元数据和数据存放在一起 每个信息都有一个HTML标记 该标记相当于一个容器 对所包含的数据进行描述 例如 数据 John 实际将保存为<NameFirst>John</NameFirst> 虽然自描述符会使XML文件增大 但它使得在没有元数据信息的情况下能容易地理解数据
几乎所有的数据源都有某种系统控制数据的使用权限 安全上的第一个问题是验证 系统在这里判断是谁要求使用数据 关于验证的话题在第 章中己经详细介绍过 因此这里不再花费过多时间进行讨论 一般地 有两种类型的验证 Windows Authentication(也称为Trusted Security)和SQL Authentication 使用哪种验证是在安装数据库的时候决定的 对于SQL Server Express 可以选择Windows Authentication或Mixed 后者意味着可以使用Windows Authentication或SQL Authentication a SQL Server Express在安装时默认选择Mixed Authentication 本书默认使用Windows Authentication
本教程主要使用Microsoft的SQL Server 该产品以不同的功能集出售 但对于我们最简单版本(SQL Server Express)的功能就足够了 幸运的是 Microsoft免费提供SQL ServerExpress 而且可以按照本书给出的指令自动安装SQL Server Express的好处在于 当您希望将自己的站点部署给公众访问的时候 所有的代码都不需要修改就可以直接移植到功能完整的SQL Server中
一旦通过验证(证明自己就是自己声称的人) 在使用数据时将有一组权限和限制 首先是查看数据的限制 数据库管理员(DBA)通常会限制直接访问表 取而代之 您可能只能通过某个视图或查询查看包含一定字段或记录的数据 其次 您可能会遇到怎样修改数据的限制 或者能否修改数据的限制 最后 即使可以修改数据 也存在数据可以怎样修改的限制(称为约束) 以使用Wrox United为例 一般情况下不能删除在赛程表中的某个球队(这样就会使赛程表存在着逻辑上的错误 造成某些比赛没有两个球队参加)
lishixin/Article/program/net/201311/14515