如果您想了解sql-server-2005–过程从ADO.NET中超时,但在SSMS中没有和pl/sql过程已成功完成的知识,那么本篇文章将是您的不二之选。我们将深入剖析sql-server-2005
如果您想了解sql-server-2005 – 过程从ADO.NET中超时,但在SSMS中没有和pl/sql过程已成功完成的知识,那么本篇文章将是您的不二之选。我们将深入剖析sql-server-2005 – 过程从ADO.NET中超时,但在SSMS中没有的各个方面,并为您解答pl/sql过程已成功完成的疑在这篇文章中,我们将为您介绍sql-server-2005 – 过程从ADO.NET中超时,但在SSMS中没有的相关知识,同时也会详细的解释pl/sql过程已成功完成的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- sql-server-2005 – 过程从ADO.NET中超时,但在SSMS中没有(pl/sql过程已成功完成)
- .NET 中SQL Server 2000、SQL Server 2005 连接字符串
- ADO.NET在SQLSERVER2005数据库的存储设计模式
- asp.net – SQL Server查询从ADO.NET运行速度比SSMS慢
- ASP.NET中不使用LINQ访问 mssql server 2005数据库解决办法
sql-server-2005 – 过程从ADO.NET中超时,但在SSMS中没有(pl/sql过程已成功完成)
System.Data.sqlClient.sqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. at System.Data.sqlClient.sqlConnection.OnError(sqlException exception,Boolean breakConnection) at System.Data.sqlClient.sqlInternalConnection.OnError(sqlException exception,Boolean breakConnection) at System.Data.sqlClient.TdsParser.ThrowExceptionAndWarning() at System.Data.sqlClient.TdsParser.Run(RunBehavior runBehavior,sqlCommand cmdHandler,sqlDataReader dataStream,BulkcopySimpleResultSet bulkcopyHandler,TdsParserStateObject stateObj) at System.Data.sqlClient.sqlDataReader.ConsumeMetaData() at System.Data.sqlClient.sqlDataReader.get_MetaData() at System.Data.sqlClient.sqlCommand.FinishExecuteReader(sqlDataReader ds,RunBehavior runBehavior,String resetoptionsstring) at System.Data.sqlClient.sqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,Boolean returnStream,Boolean async) at System.Data.sqlClient.sqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method,DbAsyncResult result) at System.Data.sqlClient.sqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method) at System.Data.sqlClient.sqlCommand.ExecuteReader(CommandBehavior behavior,String method) at System.Data.sqlClient.sqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
这个堆栈跟踪对任何人都意味着什么?看起来我的sproc可能已经完成了,并且在尝试读取某种元数据时超时了?
我尝试在运行过程中查看该进程并将其暂停. sys.dm_os_waiting_tasks将等待类型显示为IO_COMPLETION,如果有任何用途的话.我在数据库中使用sp_who2’active’看到的唯一进程是一次超时和我的活动SSMS窗口,所以我不认为这是一个阻塞问题.我验证了这个数据库与工作数据库具有相同的权限,并运行dbcc checkdb而没有任何错误.如何确定超时的原因?
解决方法
SELECT session_id,[ansi_defaults],[ansi_null_dflt_on],[ansi_nulls],[ansi_padding],[ansi_warnings],[arithabort],[concat_null_yields_null],[deadlock_priority],[quoted_identifier],[transaction_isolation_level] FROM sys.dm_exec_sessions WHERE session_id IN (<spid1>,<spid2>);
当您发现一些不同的情况时,请尝试将每个设置更改为SSMS查询中的相反设置,直到获得超时(或在发送查询之前手动设置应用程序代码中的选项).现在,我没有方便的2005实例,所以没有测试过这个查询.您可能需要注释掉一个或多个列名称.
.NET 中SQL Server 2000、SQL Server 2005 连接字符串
摘要: SQL Server 2005和SQL Server 2000在数据库访问上面是通用的,关键在一个 连接 串的配置,其实这两个数据的 连接 串是可以通用的,关键是数据库服务器地址的问题。SQL Server 2005和2000数据库默认访问端口不一样。2005是2317,2000的是1433。 微软的
摘要:SQL Server 2005和SQL Server 2000在数据库访问上面是通用的,关键在一个连接串的配置,其实这两个数据的连接串是可以通用的,关键是数据库服务器地址的问题。SQL Server 2005和2000数据库默认访问端口不一样。2005是2317,2000的是1433。
微软的SQL Server 2005和SQL Server 2000在数据库访问上面是通用的,关键在一个连接串的配置,其实这两个数据的连接串是可以通用的,关键是数据库服务器地址的问题。SQL Server 2005和2000数据库默认访问端口不一样。2005是2317,2000的是1433。下面四个连接串都可以访问2000。
Server=myServerAddress;Database=DatabaseName;Uid=UserName;Pwd=Password;
Data Source=myServerAddress;Initial Catalog=DatabaseName;User ID=UserName;pwd=Password;
Server=myServerAddress,1433;Database=DatabaseName;Uid=UserName;Pwd=Password;
Data Source=myServerAddress,1433;Initial Catalog=DatabaseName;User ID=UserName;pwd=Password;
myServerAddress是数据库服务器地址,当您只写地址不写端口的情况下他们默认访问的是1433端口,也就是sqlserver 2000的数据库服务器。如果你想访问sqlserver 2005你就必须加上访问端口(,2317)或者在后面添加(\SQLExpress),如下面
Server=myServerAddress,2317;Database=DatabaseName;Uid=UserName;Pwd=Password;
Data Source=myServerAddress,2317;Initial Catalog=DatabaseName;User ID=UserName;pwd=Password;
Server=myServerAddress\SQLExpress;Database=DatabaseName;Uid=UserName;Pwd=Password;
Data Source=myServerAddress\SQLExpress;Initial Catalog=DatabaseName;User ID=UserName;pwd=Password;
通过对比你就会发现,这里面的关键部分就是端口, 只要端口对了就任何问题,至于他们的访问形式和方法是完全一样,因为他们虽然不是双胞胎但也是亲兄弟,沟通方式一样,唯一的就是名字不一样。
ADO.NET在SQLSERVER2005数据库的存储设计模式
【xmzhaoym原创,请勿转载】
-
1、自动返回自增ID自增值的方法
原理:ADO.NET对象sqlDataAdapter 在更新数据对象时,如更新DataTable或DaTarow时,sqlDataAdapter 的sqlCommand对象(InsertCommand、UpdateCommand )的返回值,会自动回写到DaTarow的相应字段名的值。通过这种方式可以将自增ID值和时间戳字段值返回到客户端ADO.NET对象中。具体实现要点如下:
sqlDataAdapter da = new sqlDataAdapter();
da.InsertCommand = this.insertCommand;
da.UpdateCommand = this.updateCommand;
da.DeleteCommand = this.deleteCommand;
da.Update(this.dataTable);
假设自增表结构为
CREATE TABLE Test (
ID smallint IDENTITY(1,1),
Name varchar(20) NULL,
LastChanged timestamp NULL,
PRIMARY KEY CLUSTERED (ID ASC)
)
go
InsertCommand 对应的存储过程:
CREATE PROCEDURE dbo.TestInsert
(
@Name varchar(20),
@LastChanged timestamp
)
AS
INSERT INTO dbo.Test
(
Name
)
VALUES
(
@Name
)
--关键脚本,通过Select 字段名,实现返回值。sqlDataAdapter 对象自动将返回值回写到前台DaTarow对象
Select ID,LastChanged From dbo.Test Where ID = @@IDENTITY
GO
-
2、避免数据行被多用户相互覆盖的方式
一个简单便捷的方法是在保存数据时,通过sqlSERVER2005的时间戳字段,检查数据是否被其他用户修改。
时间戳字段介绍:
时间戳字段 timestamp 是sqlSERVER2005新增的字段类型,它的作用在于:只要数据库的表增加一个时间戳字段,数据库系统将自动维护任何该表的行记录的修改时间戳,它是一个数值型,行记录只要有任何字段被修改,该时间戳字段将自动累加一个数值。这个机制,为检查行记录是否被其他用户修改提供了简单高效的支持。特别在两个副本表之间数据同步,或数据仓库需要差异读取子上次修改后的行记录,这些特备影响性能的查询,均可以用时间戳实现高效的查询。以往获取差异数据,往往要进行时间字段的对比。时间戳的数据累加基数是定位在表,也就是说时间戳的值在表里面一定是不重复的。
存储过程示例:
CREATE PROCEDURE dbo.TestUpdate
(
@ID smallint,
@Name varchar(20),
@LastChanged timestamp
)
AS
UPDATE dbo.Test SET
Name = @Name
WHERE
ID = @ID AND LastChanged=@LastChanged -- where条件加入时间戳条件,如果数据行被外部用户修改了,则时间戳值一定和当----前值不一致,导致更新0行,通过 “IF @@ROWCOUNT = 0” 判断,抛出异常,阻止外部保存
IF @@ROWCOUNT = 0
RAISERROR('Row has been edited by another user',16,1)
SELECT LastChanged --每次修改,时间戳都会产生新值,所以最新值必须返回到前台客户端,原理同1介绍的方法。
FROM dbo.Test WHERE ID = @ID
RETURN
UI层注意事项
WINFORM的dataGridView1控件在显示timestamp字段时,会出现异常错误。实际上用户不需要在UI看到timestamp字段。
解决的方法,隐藏或删除grid的时间戳column列。如this.dataGridView1.Columns["LastChanged"].Visible = false。
asp.net – SQL Server查询从ADO.NET运行速度比SSMS慢
有什么想法可能导致延误?我的第一个想法是,可能有一些参数嗅探存储过程被调用(所述存储过程运行CTE,如果重要)导致了一个坏的查询计划,这将解释问题的间歇性质.由于分离/重新连接和索引重建在理论上应该使缓存的查询计划无效,这是有道理的,但我不确定如何验证这一点.此外,为什么不通过SSMS手动运行相同的查询(直接从具有完全相同参数的sql Profiler复制)的查询显示相同的延迟?
有什么想法吗?
解决方法
找不到根本原因不能有更好的解决方案.试图偷看和戳捅各种设置,希望它修复问题永远不会给你实际确定的信心.此外,下一次系统可能会有一个不同的问题,你会相信这个同样的问题重新出现,并应用一个坏的解决方案.
最好的尝试是捕获坏的执行计划. Showplan XML Event Class Profiler事件是您的朋友,您可以获得ADO.Net电话的计划.这是一个非常重的事件,所以你应该附加分析器,并捕获它只有当问题出现在一个简短的会话.
查询IO统计信息也可以帮助. RPC:Completed和SQL: Batch Completed事件都包括读取和写入,因此您可以比较由ADO.Net调用与SSMS一个执行的逻辑IO的数量.大差异(完全相同的查询和参数)表示不同的计划.7003是另一个调查渠道.您可以在其中找到您的查询计划并检查执行统计信息.
所有这些都应该有助于确定问题是否是一个坏的计划或别的东西,首先.
ASP.NET中不使用LINQ访问 mssql server 2005数据库解决办法
.net中不使用linq访问 mssql server 2005解决办法
应用程序的数据访问是通过ado.net完成的,ado.net可以使web应用程序从各种数据源中快速访问数据。
在asp.net中不使用linq访问数据库,而是通过写sql文直接访问microsoft sql server 2005
1.添加引用system.configuration,并在程序中使用命名空间using system.configuration。
2."configurationmanager.connectionstrings["connectionstring"].connectionstring"中方括号中引号内的字符串和我的工程中web.config配置文件中
3.没有打开数据库连接。因为我的程序中缺少l了"sqlcon.open();”这句代码。
using system.data.sqlclient; using system.configuration; protected void setorders(sting morders) { string sqlconnstr = configurationmanager.connectionstrings["mywebconnectionstrings"].connectionstring; sqlconnection sqlcon = new sqlconnection(sqlconnstr); sqlcommand commd = new sqlcommand(); commd.connection = sqlcon; sqlcon.open(); commd.commandtext = "update orderlist set status = 1 where (orderid in (" + mpayingnum + ")"+")"; sqldatareader sqldatareader = commd.executereader(); commd = null; sqlcon.close(); sqlcon = null; }
关于sql-server-2005 – 过程从ADO.NET中超时,但在SSMS中没有和pl/sql过程已成功完成的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.NET 中SQL Server 2000、SQL Server 2005 连接字符串、ADO.NET在SQLSERVER2005数据库的存储设计模式、asp.net – SQL Server查询从ADO.NET运行速度比SSMS慢、ASP.NET中不使用LINQ访问 mssql server 2005数据库解决办法等相关知识的信息别忘了在本站进行查找喔。
本文标签: