标签:
连接池是微软提供的一种底层优化,如果我们每次执行命令都要创建连接,关闭连接的话,会造成比较大的性能开销。于是微软提供了连接池这一概念,也就是说,我们没使用一次连接,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,回见~
标签:
原文地址:http://www.cnblogs.com/blackerXHunter/p/4543528.html