我在我的服务器上运行了应用程序.这个应用程序的问题是每天我得到近10-20,System.Data.SqlClient.SqlException Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding只有我的一个SP.这是我的SP,
ALTER PROCEDURE [dbo].[Insertorupdatedevicecatalog]
(@OS NVARCHAR(50)
,@UniqueID VARCHAR(500)
,@Longitude FLOAT
,@Latitude FLOAT
,@Culture VARCHAR(10)
,@Other NVARCHAR(200)
,@IPAddress VARCHAR(50)
,@NativeDeviceID VARCHAR(50))
AS
BEGIN
DECLARE @OldUniqueID VARCHAR(500) = '-1';
SELECT @OldUniqueID = [UniqueID] FROM DeviceCatalog WHERE (@NativeDeviceID != '' AND [NativeDeviceID] = @NativeDeviceID);
BEGIN TRANSACTION [Tran1]
BEGIN TRY
IF EXISTS(SELECT 1 FROM DeviceCatalog WHERE [UniqueID] = @UniqueID)
BEGIN
UPDATE DeviceCatalog
SET [OS] …Run Code Online (Sandbox Code Playgroud) 我有一个Web服务,因此处理程序会一直多次同时调用.
在里面我创建了SqlConnection和SqlCommand.我必须执行大约7个不同的命令.不同的命令需要各种参数,所以我只需添加一次:
command.Parameters.Add(new SqlParameter("@UserID", userID));
command.Parameters.Add(new SqlParameter("@AppID", appID));
command.Parameters.Add(new SqlParameter("@SID", SIDInt));
command.Parameters.Add(new SqlParameter("@Day", timestamp.Date));
command.Parameters.Add(new SqlParameter("@TS", timestamp));
Run Code Online (Sandbox Code Playgroud)
然后在执行期间我只需更改CommandText prorerty,然后调用ExecuteNonQuery(); 或ExecuteScalar();
我面临性能问题.例如,小调试和分析显示该命令
command.CommandText = "SELECT LastShowTS FROM LogForAllTime WHERE UserID = @UserID";
Run Code Online (Sandbox Code Playgroud)
平均需要大约50毫秒.如果我将其更改为:
command.CommandText = "SELECT LastShowTS FROM LogForAllTime WHERE UserID = '" + userID.Replace("\'", "") + "'";
Run Code Online (Sandbox Code Playgroud)
然后它只需要1ms的平均值!
我只是无法弄清楚在哪里调查问题.
我有一个针对SQL Server运行的.NET 4.0以数据库为中心的应用程序(胖客户端,WinForms)(主要是通过Linq转换为Sql,其中包含一些普通的ADO.NET),它部署在数百个环境中(每个环境都由客户的IT维护)员工).该应用程序是对我公司遗留FoxPro产品的重写,该产品已使用多年.
该应用程序似乎对我们所有的客户都运行良好,除了一个,这是有间歇性的例外,如下所示:
System.Data.SqlClient.SqlException(0x80131904):超时已过期.操作完成之前经过的超时时间或服务器没有响应.
请求无法运行,因为批处理已中止,这可能是由客户端发出的中止信号引起的,或者是另一个请求在同一会话中运行,这会使会话忙.
我在网上可以找到关于此的所有内容(例如此处和此处)说这个问题是在SP1中解决的SQL Server 2005错误.但是,这个客户正在使用SQL Server 2008 R2 Express(这已经过我们公司的验证;我们不仅仅是接受客户的话).此外,我们没有使用连接池或分布式事务,因此我发现的链接似乎更不相关.
同样,问题是间歇性的(每天几次),并且发生在他们所有的各种工作站上(似乎表明它不是单个客户端的问题).传统的FoxPro应用程序仍然存在于其环境中并且工作正常(针对完全相同的数据库),这似乎表明它不仅仅是网络或数据库服务器问题.
任何帮助将不胜感激.
运行代码时,出现以下异常:
System.Data.dll中发生了类型为'System.Data.SqlClient.SqlException'的未处理的异常
附加信息:执行超时已过期。在操作完成之前超时或服务器没有响应。
我的代码如下:
private void FillInDataGrid(string SQLstring)
{
string cn = ConfigurationManager.ConnectionStrings["Scratchpad"].ConnectionString; //hier wordt de databasestring opgehaald
SqlConnection myConnection = new SqlConnection(cn);
SqlDataAdapter dataadapter = new SqlDataAdapter(SQLstring, myConnection);
DataSet ds = new DataSet();
myConnection.Open();
dataadapter.Fill(ds, "Authors_table");
myConnection.Close();
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Authors_table";
}
Run Code Online (Sandbox Code Playgroud)
我的SQLstring是以下内容:
SELECT dbo.[new].[colom1],dbo.[new].[colom2],dbo.[new].[colom3],dbo.[new].[colom4],
dbo.[new].[Value] as 'nieuwe Value',
dbo.[old].[Value] as 'oude Value'
FROM dbo.[new]
JOIN dbo.[old] ON dbo.[new].[colom1] = dbo.[old].[colom1] and dbo.[new].[colom2] = dbo.[old].[colom2] and dbo.[new].[colom3] = dbo.[old].[colom3] and dbo.[new].[colom4] = dbo.[old].[colom4]
where dbo.[new].[Value] <> dbo.[old].[Value]
Run Code Online (Sandbox Code Playgroud) 我正在运行一个存储过程,但在运行它时显示如下错误
超时已过。操作完成前超时时间已过或服务器未响应。
我已经设置了我的网络配置
<add name="SAMPLECONNECTION" connectionString="Data Source=ADMIN\SQLEXPRESS;Initial Catalog=PFGRT;Persist Security Info=True;MultipleActiveResultSets=true;User ID=sa;connect Timeout =1000000;Password=PASSWORD"
providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
我也试过像设置一样connect Timeout = 0;,但我得到了同样的错误。
我该如何解决?
我的存储过程调用类
public DataSet adFeedBackReportFacultyWise(string SetID, string FacultyID, string SubjectID,string groupid)
{
DbUtil du = new DbUtil();
Dictionary<string, SqlParameter> cmdParameters = new Dictionary<string, SqlParameter>();
cmdParameters["SetID"] = new SqlParameter("SetID", SetID);
cmdParameters["FacultyID"] = new SqlParameter("FacultyID", FacultyID);
cmdParameters["SubjectID"] = new SqlParameter("SubjectID", SubjectID);
cmdParameters["groupid"] = new SqlParameter("groupid", groupid);
return du.ExecuteQuery("adFeedBackReportFacultyWise", cmdParameters);
}
Run Code Online (Sandbox Code Playgroud)
我的 DButil 类是
public class DbUtil
{
string connection = ConfigurationManager.ConnectionStrings["gatikkcmsConnectionString"].ConnectionString; …Run Code Online (Sandbox Code Playgroud) c# ×3
sql-server ×3
ado.net ×2
asp.net ×2
sql ×2
.net ×1
exception ×1
sqlcommand ×1
sqlparameter ×1