惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy International News Feed
I
Intezer
T
Tenable Blog
S
Schneier on Security
Project Zero
Project Zero
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
Know Your Adversary
Know Your Adversary
博客园 - 司徒正美
The Cloudflare Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
News and Events Feed by Topic
博客园 - 叶小钗
宝玉的分享
宝玉的分享
L
LINUX DO - 热门话题
aimingoo的专栏
aimingoo的专栏
S
Secure Thoughts
Forbes - Security
Forbes - Security
T
The Exploit Database - CXSecurity.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
罗磊的独立博客
IT之家
IT之家
H
Hacker News: Front Page
I
InfoQ
云风的 BLOG
云风的 BLOG
S
Security Affairs
M
MIT News - Artificial intelligence
GbyAI
GbyAI
Jina AI
Jina AI
Help Net Security
Help Net Security
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
Webroot Blog
Webroot Blog
L
Lohrmann on Cybersecurity
A
About on SuperTechFans
Attack and Defense Labs
Attack and Defense Labs
The Register - Security
The Register - Security
V
V2EX
G
Google Developers Blog
D
DataBreaches.Net
Apple Machine Learning Research
Apple Machine Learning Research
C
Cybersecurity and Infrastructure Security Agency CISA
J
Java Code Geeks
W
WeLiveSecurity
Cloudbric
Cloudbric
T
Tor Project blog

博客园 - sooloo

asp.net遍历控件的实现 [转]Creating Custom Web Controls in C# Stats(演示了如何创建一个导航条) [转]创建动态数据输入用户界面(ASP.NET 中的动态控件入门) [转]ASP.NET 页面对象模型 [转]基于功能更丰富的基础类构建您自己的 ASP.NET 页面 [转]ASP.NET中促进代码重用的2种模式 [原创]利用CSS实现页面换肤 [转] 动态加载Asp.net分页控件 [转] more than one way to skin an app [转]模拟Asp.Net Forums实现可以换皮肤的控件 [转]在ASP.Net中两种利用CSS实现多界面的方法 转:dotext数据库篇 Vs2003调试DotText时碰到的一个问题 DotText数据库分析(2) CnDotText数据库分析(1) 高程历年试题及答案 [转帖]追MM与设计模式 学习cnblogsGuestBook V2.0 --(2) 学习cnblogsGuestBook V2.0
DotText分析---新Blog注册
sooloo · 2005-09-07 · via 博客园 - sooloo

面对DotText的源代码,对偶等初学者而言,简直无从下手。只好硬着头皮捡条理清晰的下手。前面看了Blog_Config 表,看了添加新Blog的存储过程,现在自然会想到blog_UTILITY_AddBlog是如何被调用的。
很容易在.\DotTextWeb下找到 register.aspx和register.aspx.cs.重点分析代码文件。

使用了以上几个命名空间。Dottext.Framework命名空间的类视图如下:

一头雾水。。。。继续看代码

前面声明了一些页面的Web控件,主要是一些文本录入控件,验证控件,按钮之类。
后面page_load()这段,表示从"~/Admin/Skins.config"XML文件中,读取内容,绑定到DropDownList ddlSkin中。

再来看当“注册”按钮被按下后

        private void Linkbutton1_Click(object sender, System.EventArgs e)
        
{
            
if(this.txbTitle.Text=="")
            
{
                
this.txbTitle.Text=this.txbUser.Text;
            }

            
string host = Config.Settings.AggregateHost;//ConfigurationSettings.AppSettings["AggregateHost"] as string;
            string url = Config.Settings.AggregateUrl;
            
string sql = "blog_UTILITY_AddBlog";
            
string conn = Dottext.Framework.Providers.DbProvider.Instance().ConnectionString;
            
string city=Request.Form.Get("city");
            
if(city==null)
            
{
                city
="";
            }

            SqlParameter[] p 
= 
                
{
                    SqlHelper.MakeInParam(
"@UserName",SqlDbType.NVarChar,50,this.txbUser.Text),
                    SqlHelper.MakeInParam(
"@Password",SqlDbType.NVarChar,50,Security.Encrypt(this.txbPwd.Text)),
                    SqlHelper.MakeInParam(
"@Email",SqlDbType.NVarChar,50,this.txbEmail.Text),
                    SqlHelper.MakeInParam(
"@Host",SqlDbType.NVarChar,50,host),
                    SqlHelper.MakeInParam(
"@Application",SqlDbType.NVarChar,50,this.txbUser.Text),
                    SqlHelper.MakeInParam(
"@Author",SqlDbType.NVarChar,50,this.txbAuthor.Text),
                    SqlHelper.MakeInParam(
"@Title",SqlDbType.NVarChar,100,this.txbTitle.Text),
                    SqlHelper.MakeInParam(
"@SubTitle",SqlDbType.NVarChar,250,this.txbSubtitle.Text),
                    SqlHelper.MakeInParam(
"@IsHashed",SqlDbType.Bit,0,1),
                    SqlHelper.MakeInParam(
"@Skin",SqlDbType.NVarChar,50,this.ddlSkin.SelectedValue),
                    SqlHelper.MakeInParam(
"@City",SqlDbType.NVarChar,50,city),
                    
                }
;
            
//int result=0;
            try
            
{
                Dottext.Framework.Data.SqlHelper.ExecuteNonQuery(conn,CommandType.StoredProcedure,sql,p);
            }

            
catch
            
{
                Response.Write(
"<font color='red'>用户名已存在</font>");
                
//throw; 
            }

            Response.Redirect(url
+this.txbUser.Text);
        }

最最关键的一句就是:
Dottext.Framework.Data.SqlHelper.ExecuteNonQuery(conn,CommandType.StoredProcedure,sql,p);
(1)conn: 连接数据库字符串。由以下方法获取:
             string conn = Dottext.Framework.Providers.DbProvider.Instance().ConnectionString;
(2)CommandType.StoredProcedure  调用方式为存储过程。
(3)sql : 定义string sql = "blog_UTILITY_AddBlog"; 调用的存储过程名。
(4)  p : SqlParameter[] p, 及存储过程的入口参数。

SqlHelper实际上是Microsoft Application Blocks for .NET组件的一个类。Data Access Application Block 是一个 .NET 组件,包含优化的数据访问代码,可以帮助用户调用存储过程以及向 SQL Server 数据库发出 SQL 文本命令。它返回 SqlDataReader、DataSet 和 XmlReader 对象。您可以在自己的 .NET 应用程序中将其作为构造块来使用,以减少需要创建、测试和维护的自定义代码的数量。

Data Access Application Block 可以帮助您:

  • 调用存储过程或 SQL 文本命令。
  • 指定参数详细信息。
  • 返回 SqlDataReader、DataSet 或 XmlReader 对象。

SqlHelper 类提供了一组静态方法,可以用来向 SQL Server 数据库发出许多各种不同类型的命令。

SqlHelperParameterCache 类提供命令参数缓存功能,可以用来提高性能。该类由许多 Execute 方法(尤其是那些只运行存储过程的重写方法)在内部使用。数据访问客户端也可以直接使用它来缓存特定命令的特定参数集。

而且,Data Access Application Block是一个开源的代码,可以象Dottext一样用到自己的项目中。
不想过于深入,点到为止,呵呵