相关疑难解决方法(0)

偶尔获取SqlException:超时已过期

我在我的服务器上运行了应用程序.这个应用程序的问题是每天我得到近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)

sql sql-server asp.net ado.net sql-server-2012

20
推荐指数
2
解决办法
8万
查看次数

sqlparameter性能不佳

我有一个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的平均值!

我只是无法弄清楚在哪里调查问题.

c# sql-server ado.net sqlcommand sqlparameter

9
推荐指数
1
解决办法
1万
查看次数

间歇性"批次中止"例外

我有一个针对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应用程序仍然存在于其环境中并且工作正常(针对完全相同的数据库),这似乎表明它不仅仅是网络或数据库服务器问题.

任何帮助将不胜感激.

.net sql-server exception

5
推荐指数
1
解决办法
3144
查看次数

执行超时已过期。操作完成之前经过的超时时间或服务器未响应

运行代码时,出现以下异常:

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)

c# sql sqldataadapter

1
推荐指数
1
解决办法
5万
查看次数

超时已过。操作完成之前超时时间已过,或者服务器没有响应。”

我正在运行一个存储过程,但在运行它时显示如下错误

超时已过。操作完成前超时时间已过或服务器未响应。

我已经设置了我的网络配置

   <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# asp.net stored-procedures

0
推荐指数
1
解决办法
1万
查看次数