针对asp.net–ExecuteReader需要时间,而不是SQL服务器?和asp.nettimer这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ADO.NET2.0中的SqlComma
针对asp.net – ExecuteReader需要时间,而不是SQL服务器?和asp.net timer这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ADO.NET 2.0中的SqlCommand.ExecutePageReader、ADO.Net基础/连接SQLServer/ExecuteNoQuery()/ExecuteScalar、ASP中Server.Execute和Execute实现动态包含(include)脚本的区别、c# – SQL Server将SP_EXECUTESQL识别为对象而不是过程名称等相关知识,希望可以帮助到你。
本文目录一览:- asp.net – ExecuteReader需要时间,而不是SQL服务器?(asp.net timer)
- ADO.NET 2.0中的SqlCommand.ExecutePageReader
- ADO.Net基础/连接SQLServer/ExecuteNoQuery()/ExecuteScalar
- ASP中Server.Execute和Execute实现动态包含(include)脚本的区别
- c# – SQL Server将SP_EXECUTESQL识别为对象而不是过程名称
asp.net – ExecuteReader需要时间,而不是SQL服务器?(asp.net timer)
代码有什么问题?
spString = "usp_graph" sqlcmd_q.Connection = sqlCnn sqlcmd_q.CommandText = spString sqlcmd_q.CommandType = CommandType.StoredProcedure sqlcmd_q.Parameters.AddWithValue("@clientid",clientId) sqlcmd_q.Parameters.AddWithValue("@store",storeID) sqlcmd_q.Parameters.AddWithValue("@attributes",attributeNumber) sqlcmd_q.Parameters.AddWithValue("@attri1_idx",attribute1_idx)sqlCnn.open() sqlcmd_q.CommandTimeout = 300 sqldr = sqlcmd_q.ExecuteReader() // taking time here dt.Load(sqldr) dsGrid.Tables.Add(dt)
解决方法
ADO.NET 2.0中的SqlCommand.ExecutePageReader
http://blog.joycode.com/liuhuimiao/ SqlDataReader GetPage(int pageNumber, int pageSize)
{
//pageNumber: 从 0 开始计数的页码
//pageSize: 每页的记录数
String command = String.Format("SELECT * FROM (SELECT TOP {0} * FROM " +
"Products ORDER BY ProductID) AS t1 WHERE ProductID NOT IN " +
"(SELECT TOP {1} ProductID FROM Products ORDER BY ProductID) ",
pageSize * (pageNumber + 1), pageSize * pageNumber);
SqlConnection conn = new SqlConnection("server=.;database=Northwind;Trusted_Connection=yes");
SqlCommand cmd = new SqlCommand(command, conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
有时为更好实现分页性能效果,也可以采用存储过程建立临时表的方式进行数据分页,但原理基本都差不多。在ADO.NET 2.0 PDC/Beta1中,用SqlCommand.ExecutePageReader进行数据分页:
SqlDataReader GetPageReader(int pageNumber, int pageSize)
{
int startIndex = (pageNumber - 1) * pageSize;
String command = "SELECT * FROM Products";
SqlConnection conn = new SqlConnection("server=.;database=Northwind;Trusted_Connection=yes");
SqlCommand cmd = new SqlCommand(command, conn);
conn.Open();
SqlDataReader dr = cmd.ExecutePageReader(CommandBehavior.CloseConnection, startIndex, pageSize);
return dr;
}
最后绑定第2页的5行数据(ProductID从6到10)到GridView1上:
GridView1.DataSource = GetPage(1, 5);
GridView1.DataBind();
从上可以看到,用了ExecutePageReader确实简单了很多。但是,很“不幸”告诉大家,ExecutePageReader在未来版本中将不会出现,也就是说被cut掉了。至于cut的真正原因,还真不知道。不过,我试图用Reflector去看其内部,发现这样一个调用顺序:ExecutePageReader()—》SqlResultSet.CompleteOpenForPageReader()—》SqlResultSet.FetchInternal()—》执行存储过程sp_cursorfetch,也就是实际ExecutePageReader使用了SQLServer的服务器游标进行数据分页读取,但这跟它被cut是否有关?这么好用的一个功能被cut是不是有其他考虑?或许ADO.NET开发小组在鱼和熊掌取舍之间已经做了抉择,只是我还是觉得ExecutePageReader(据说SqlResultSet也被cut,然后连同ExecutePageReader被cut)被cut很可惜。
原文链接: http://blog.csdn.net/21aspnet/article/details/164010
ADO.Net基础/连接SQLServer/ExecuteNoQuery()/ExecuteScalar
ADO.Net基础
程序要和数据交互要通过ADO.Net进行,通过ADO.Net就能在程序中执行
sql了。 ADO.Net中提供了对各种不同数据的统一操作接口。
直接在项目中内嵌mdf文件的方式使用sqlServer数据库(基于服务的数据
库)。 mdf文件随着项目走,用起来方便,和在数据库服务上创建数据库
没什么区别,运行的时候会自动附加(Attach)。
双击mdf文件会在“服务器资源管理器”中打开,管理方式和在
Management Studio没有什么本质不同。要拷贝mdf文件需要关闭所有指向
mdf文件的连接。
正式生产运行的时候到附加sqlServer上、修改连接字符串即可,除此之
外没有任何的区别,在“数据库”节点上点右键“附加”;在数据库节点
上任务分离就可以得到可以拷来拷去mdf文件。
用的时候要在控制台、WinForm项目中在Main函数最开始的位置加入备注
中的代码。ASP.Net项目中不需要。
连接sqlServer
连接字符串:程序通过连接字符串指定要连哪台服务器上的、哪个实例的
哪个数据库、用什么用户名密码等。
项目内嵌mdf文件形式的连接字符串“Data Source=.
\sqlEXPRESS;AttachDBFilename=|DataDirectory|
\Database1.mdf;Integrated Security=True;User Instance=True”。
“.\sqlEXPRESS”表示“本机上的sqlEXPRESS实例”,如果数据库
实例名不是sqlEXPRESS,则需要修改。” Database1.md“f为mdf的文件
名。
ADO.Net中通过sqlConnection类创建到sqlServer的连接,
sqlConnection代表一个数据库连接, ADO.Net中的连接等资源都实现了
Idisposable接口,可以使用using进行资源管理,执行备注中的代码如果
成功了就 ok。
可能遇到的错误
1、由于 启动用户实例的进程时出错,导致无法生成sqlServe的用户实例
。
http://wenwen.soso.com/z/q15616823.htm
2、版本太低,只支持2005及以下数据库。解决:安装VisualStudio 2008
SP1.
3、启动超时。多试几次
执行简单的Insert语句
sqlCommand表示向服务器 提交的命令(sql语句等)CommandText属性为
要执行的sql语句,Execute NonQuery方法执行一个非查询语句(Update
、Insert、Delete等)
Using(sqlCommand cmd=conn.CreateCommand())
{
cmd.CommandText=“Insert into T_Users(UserName.Password)
values (’admin’,’888888’)”;
cmd ExecuteNonQuery();
}
ExecuteNonquery返回值是执行的影响行数
常犯错:
string username=‘test’;
…….
cmd.CommandText=“Insert into T_Users(UserName.Password) values
(’username’,’888888’)”;
ExecuteNoQuery()
sqlCommand表示向服务器 提交的命令(sql语句等)CommandText属性为
要执行的sql语句,Execute NonQuery方法执行一个非查询语句(Update
、Insert、Delete等)
Using(sqlCommand cmd=conn.CreateCommand())
{
cmd.CommandText=“Insert into T_Users(UserName.Password)
values (’admin’,’888888’)”;
ExecuteScalar
sqlCommand 的一个方法,用于执行查询,返回查询中返回的结果 集中的
第一行 第一列 。
1)
Output inserted.id
执行有多行结果集的用ExecuteReader();
sqlDataReader
Cmd.executeNoQuery()
Cmd.executeReader()
sqlDataReader reader=cmd.ExecuteReader();
While(reader.Read())
{
Console.writeline(reader.GetString(1));
}
Reader 有方法 GetString,GetInt32等方法,他的参数都是整数,序号
。Getordinal方法,根据列名动态得到序号。
执行有多行结果集的用ExecuteReader();
Reader 有方法 GetString,GetInt32等方法,他的参数都是整数,序号
。Getordinal方法,根据列名动态得到序号。
string source = @"Data Source=.\sqlEXPRESS;AttachDBFilename=|
DataDirectory|\Database1.mdf;Integrated Security=True;User
Instance=True";
using(sqlConnection conn=new sqlConnection(source) )
{
conn.open();
using (sqlCommand com = conn.CreateCommand())
{
/* com.CommandText = "Insert into T_User
(name,age,nikaname)values('YOYO',20,'PPP')";
com.ExecuteNonQuery();
Console.WriteLine("插入成功!");
*/
com.CommandText = "select * from T_user";
sqlDataReader reader = com.ExecuteReader();
while (reader.Read())
{
string username = reader.GetString
(reader.Getordinal("name"));
int age = reader.GetInt32
(reader.Getordinal("age"));
Console.WriteLine("Uname={0},Uage=
{1}",username,age); } } } Console.WriteLine("打开了!"); Console.ReadKey(); }
ASP中Server.Execute和Execute实现动态包含(include)脚本的区别
最近打算尝试一下在ASP中实现MVC架构,肯定有人问我:ASP都淘汰了,为什么还研究?这点我也知道,自从微软放弃ASP 3.0转向ASP.NET后,ASP已经远远落后于和它几乎同时开始的PHP和JSP,开源比闭源的好处就像PHP和ASP一样,ASP说淘汰就淘汰,谁也救不了,但是值得注意的是ASP在中国市场还是蛮广泛的,尤其是一些中小企业的一些应用,简单的CMS不在话下,而且部署简单,在一些老旧的Windows系统上,不需要安装.NET Framework基本上就可以直接运行了,所以准备一个框架,还是有必要的,不过我这个是实验性框架,只是验证ASP究竟能不能实现类似PHP的MVC架构。好了,说了这么多,下面直接转入正题吧。这个问题的缘由是因为我需要动态包含ASP文件,大家知道在ASP中只有一种include方法,那就是SSI(Server Side Include),基本上分为以下两种:
<!-- #include file="sample.asp" -->
<!-- #include virtual="sample.asp" -->
这两种基本上大家第一种用得多一些,#include virtual包含的是虚拟路径,一般虚拟目录会用得到。但是这两种都属于静态的,如果我们希望是动态包含,但不可以写成:
<!-- #include file="<%=MyVar%>" -->
<!-- #include virtual="<%=MyVar%>" -->