ADO.NET开发技巧(4)-执行命令进阶

连接池

连接池是微软提供的一种底层优化,如果我们每次执行命令都要创建连接,关闭连接的话,会造成比较大的性能开销。于是微软提供了连接池这一概念,也就是说,我们没使用一次连接,ado.net都会把连接的信息放到连接池中,如果下次还使用这个连接,那么微软则从连接池中把连接信息取出来,避免了创建和释放资源。从而提高了性能。

如果我们想打开连接池,只需要在连接字符串中加入 pooling=true即可

语句参数化

我们肯定会要求用户提交参数,并执行查询,而如果用户输入了sql命令,我们又恰巧使用字符串拼接,那么可能会造成不可以预知的后果!所以微软提供了语句参数化来保证用户输入的sql命令不会执行!

我们只要在SqlCommand中做改动即可,具体格式如下:

cmd.CommandText = "select uName from User where uUserID = @UserID and uPassword = @Password";
                        cmd.Parameters.Add(new SqlParameter("UserID","hasfe"));
                        cmd.Parameters.Add(new SqlParameter("Passowrd","asfajfl"));

微软似乎比较钟爱@符号啊,这个其实可以看成一个变量。(如果你用过世界上最好的语言的话,你应该可以到处看到$符号(认真脸

配置文件

配置文件一般是微软每个程序必备的,上面记录了很多程序的配置(这tm不是废话么。。。

OK,配置文件还可以保存连接字符串,格式如下:

<configuration>
  <connectionStrings>
    <add connectionString="data source=BLACKERXHUNTER\SQLEXPRESS;initial catalog=StudyUse;integrated security=True;" name="connectionStr"/>
  </connectionStrings>
</configuration>

调用方式如下:

首先我们在引用那里添加System.Configuration程序集。然后写下这行代码:

conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["connctionStr"].ConnectionString;

注意,那个索引中的字符串对应配置文件中的name属性。

执行存储过程

存储过程可以看成一个函数,他保存数据库中。可以接受参数,也可以返回值。(其实不就是函数么

我们首先在数据库中创建存储过程(这个数据数据库的知识,这里不解释

void Proc() {
            using(SqlConnection conn = new SqlConnection("连接字符串")) {
                using(SqlCommand cmd = new SqlCommand(/*这个就是存储过程名字*/"Sum")) {
                    cmd.Connection = conn;

                    //指定类型为存储过程
                    cmd.CommandType = CommandType.StoredProcedure;

                    //指定传入参数和返回参数
                    SqlParameter para1 = new SqlParameter("@left",8);//如果需要传入参数,则传入
                    para1.Direction = ParameterDirection.Input;

                    SqlParameter para2 = new SqlParameter("@right",10);//如果需要传入参数,则传入
                    para2.Direction = ParameterDirection.Input;

                    SqlParameter para3 = new SqlParameter("@output",8);//返回的参数
                    para3.Direction = ParameterDirection.Output;
                    //添加到这里
                    cmd.Parameters.Add(para1);
                    cmd.Parameters.Add(para2);
                    cmd.Parameters.Add(para3);

                    Console.WriteLine(para3.Value);
                }
            }

        }

第一种SqlCommand方式先到这儿,可以看出,这种方式十分强大,因为他可以直接调用sql语句执行命令,但是也有很多不便。下一次我们接受DataSet和DataAdapter类的方法执行数据库命令。ok,回见~

时间: 2024-08-02 06:16:50

ADO.NET开发技巧(4)-执行命令进阶的相关文章

ADO.NET开发技巧(3)-执行命令初步

非常好,新兵,我们已经成功连接到了数据库,接下来,我们就可以让数据库执行我们的命令了,也就是,可以开始大干一场了.哦,当然,你还得知道如何让数据库执行命令.如果没掌握好技巧而弄巧成拙的话,异常大军会马上赶过来并杀死你的. 一旦SqlConnection类使用了open方法,那么,就代表我们已经连接到了数据库,哦,等等,这是-.异常大军!笨蛋,你连接字符串拼错了!怎么办?别慌,下士,microsoft送给我们的工具箱还没用呢,让我打开看看,哦,这是try-catch-finally.另一个是usi

ADO.NET开发技巧(5)-第二种方法

第二种用ado.net操作数据的方式是采用DataSet和DataAdapter.它是用Adapter类读取数据在把数据存储在DataSet中.具体代码如下: private void BindData() { string comnStr = @"data source=BLACKERXHUNTER\SQLEXPRESS;initial catalog=StudyUse; integrated security = True;"; using (SqlConnection conn

iOS开发——开发技巧&amp;Git常用命令

Git常用命令 初始化git init        加—bare实现远程仓库 配置git config user.name iCocos 配置全局git config —global user.name iCocosgit config —global user.email [email protected] 状态git status 添加到帮派git add iCocos.m 提交git commit iCocos.m -m “注释” Log纪录git loggit log + 文件名git

iOS开发——开发技巧&amp;Mac常用命令

现实和隐藏文件拓展名 显示:defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder 隐藏:defaults write com.apple.finder AppleShowAllFiles No && killall Finder

AngularJS进阶(二十九)AngularJS项目开发技巧之localStorage存储

AngularJS项目开发技巧之localStorage存储 绪 项目开发完毕,测试阶段发现后台管理端二维码生成有问题,问题在于localStorage的存储.如下图左所示,二维码生成完毕包含信息如下图左所示,实际二维码信息如下图右所示: 经过测试发现二维码实际存储的是上一次的结果.好熟悉~Bingo,自己做导航栏高亮时就遇到过这个问题,当时就是使用的localStorage.问题还是出在localStorage身上.但是存储时:localStorage.setItem(key,value),如

Python开发的3种命令执行方法

在python开发中,我们常常需要执行命令,修改相关信息.那对于初学者来说,python中如何执行命令呢?今天,小编就为大家分享3种python命令执行的方法. 1. 使用os.system("cmd") 在python中,使用os.system("cmd")的最大特点是,其执行时程序会打出cmd在linux上执行的信息. import os os.system("ls") 2. 使用Popen模块产生新的process Popen是现在pyth

AngularJS进阶(三十一)AngularJS项目开发技巧之获取模态对话框中的组件ID

AngularJS项目开发技巧之获取模态对话框中的组件ID 需求 出于项目开发需求,须要实现的业务逻辑是:药店端点击查看"已发货""已收货"订单详情时.模块弹出框中仅仅应出现"取消"button.但现实的情况例如以下图所看到的. 模态框核心代码例如以下: <script type="text/ng-template" id="billDtlContent.html"> <div class

Python开发【项目】:RPC异步执行命令(RabbitMQ双向通信)

RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 本节涉及最多的还是rabbitmq通信原理知识,要求安装rabbitmq服务 程序用广播topic模式做更好 程序目录结构: 程序简介: # 异步rpc程序 ## 1.需求 - [ ] 利用RibbitMQ进行数据交互 - [ ] 可以对多台服务器进行操作 - [ ] 执行命令后不等待命令的执行结果,而是直接让输入下一

经典收藏 50个jQuery Mobile开发技巧集萃

1.Backbone移动实例 这是在Safari中运行的一款Backbone移动应用程序.想开始体验移动开发,一个好的出发点就是关注这个应用程序的构建方式.先不妨在你的浏览器中查看该应用程序. 相关链接:http://bennolan.com/2010/11/24/backbone-jquery-demo.html 2.使用媒体查询来锁定设备 你可能会问如何使用CSS来锁定设备(根据屏幕尺寸).比如说,你想要为iPad设计两列布局.为智能手机设计单列布局.要做到这一点,最佳办法就是使用媒体查询.