Tag: sql server

SQL Server,C#:事务回滚的超时exception

我有一个奇怪的问题。 我有一个.NET程序,我的进程逻辑需要在SQL Server 2005数据库上运行一个长时间的事务(~20分钟)。 没关系,因为没有人并行访问数据库。 当出现问题时,应该回滚事务。 不常见且没有任何可见模式的DbTransaction对象上的Rollback()操作会抛出DbTransaction : 消息:“超时已到期。在操作完成之前已经过了超时时间,或者服务器没有响应。” 堆栈跟踪: 在System.Data.SqlClient.SqlInternalConnection.OnError(SqlExceptionexception,布尔breakConnection) 在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 在System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj,UInt32错误) 在System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult,TdsParserStateObject stateObj) 在System.Data.SqlClient.TdsParserStateObject.ReadPacket(Int32 bytesExpected) 在System.Data.SqlClient.TdsParserStateObject.ReadBuffer() 在System.Data.SqlClient.TdsParserStateObject.ReadByte() 在System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte [] buffer,TransactionManagerRequestType request,String transactionName,TransactionManagerIsolationLevel isoLevel,Int32 timeout,SqlInternalTransaction transaction,TdsParserStateObject stateObj,Boolean isDelegateControlRequest) 在System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest,String transactionName,IsolationLevel iso,SqlInternalTransaction internalTransaction,Boolean isDelegateControlRequest) 在System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest,String name,IsolationLevel iso,SqlInternalTransaction internalTransaction,Boolean isDelegateControlRequest) 在System.Data.SqlClient.SqlInternalTransaction.Rollback() 在System.Data.SqlClient.SqlTransaction.Rollback() 我不知道这是否真的是一个超时问题,因为代码有时会工作,有时候不会。 此外,我知道的唯一超时是ConnectionTimeout和CommandTimeout […]

从数据库中读取SQL Varbinary Blob

我正在努力将文件保存到sql blob到varbinary(max)列,并且现在有了保存方面的工作(我相信)。 我无法弄清楚如何读取数据,因为我正在使用存储过程检索我的数据库值我应该能够访问列数据,如ds.Tables [0] .Rows [0] [ “blobData”]; 所以我有必要像我在下面的例子中看到的那样有一个SQLCommand等: private void OpenFile(string selectedValue) { String connStr = “…connStr”; fileName = ddlFiles.GetItemText(ddlFiles.SelectedItem); using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = “SELECT BLOBData FROM BLOBTest WHERE testid = ” + selectedValue; using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) […]

为远程托管的SQL Server定义connectionString

目前我 definition in my Web.config`文件中有以下 definition in my : 我没有写这个,所以我觉得它是由Visual Studio自动创建的。 我的数据库托管在我们网络上的单独服务器上,那么如何定义它以及数据库用户名和密码呢? 为了示例,服务器信息和凭据是: 服务器地址:sql-database / 10.0.0.11 用户名:myUsername 密码:myPassword

将T-SQL语句解析为标记

你可以在这里看到C#代码语句解析为令牌的好坏。 例如,以下代码: namespace MyNamespace { class MyClass { public void MyFunction(int arg1) { int var1 = arg1; } } } 被解析为: 我想做这样的事情,但用T-SQL语句代替。 例如,如果我有以下T-SQL语句: IIF(COALESCE([Col001], [Col002], [Col003]) > [Col004], [Col005] * [Col006] + ISNULL([Col007], [Col008]), CONCAT(SUBSTRING([Col009], 0, 3), ‘sample text’, [Col010])) 会给我这样的东西: IIF, COALESCE, ISNULL, CONCAT, SUBSTRING – functions [Col001], [Col002], … , [Col010] – columns […]

从SQL Server批量获取记录的最佳方法是什么

场景 :我们从SQL Server获取行到C#.Net控制台应用程序,并通过存储过程对从SQL Server检索到的数据执行操作; 执行操作后,使用C#-MongoDB-Driver将新数据存储到MongoDB中。 问题 :有数十亿行。 我的存储过程包含如下查询: select * from table_name 为了计算出一些批处理逻辑,没有标识列,也没有任何日期列等。 信息 :截至目前,应用程序正在获取最多3500 – 5000条记录并存储到MongoDB中,然后抛出错误,如下所示: System.Runtime.InteropServices.SEHException(0x80004005):外部组件抛出exception。 问题 :任何人都可以建议我从SQL Server批量读取/获取一些逻辑吗?

SignalR sqlServer监听

我注意到github上有一个SignalR.SqlServer类。 https://github.com/paigecook/SignalR/tree/master/SignalR.SqlServer 想知道我是否可以用它来监听数据库更新并将它们发送给客户端? 如果是,是否有关于此function的任何文档/示例?

我可以在Entity Framework SubQuery中使用扩展方法吗?

我正在尝试使用Entity Framework整合访问不同表的逻辑。 我创建了一个扩展方法,用于从我的注册实体中提取所有注册人: public static IEnumerable Attending(this IEnumerable registrations) { return registrations.Where(r => r.Status == RegistrationStatus.Paid || r.Status == RegistrationStatus.Assigned || r.Status == RegistrationStatus.Completed); } 这适用于这样的查询: var attendees = db.Registrations.Attending().ToList(); 但是在子查询中使用它时不起作用: ProductTotals = db.Products.Where(p => p.EventID == ev.Id).Select(p => new ProductSummaryViewModel { ProductID = p.ProductID, ProductName = p.Name, Registrations = p.Registrations.Attending().Count(), }).ToList(); 我收到以下错误: LINQ to […]

SQL Server CLR线程

我一直在努力使用SQL Server CLR存储过程。 背景: 我们正在使用SQL Server 2014,并且已经实现了一个调用客户Web服务的CLR存储过程。 最初使用线程不会减慢SQL Server CLR的主线程。 虽然,现在,我知道在CLR下使用线程并不是最好的主意,但它已经正常工作了6年(自SQL Server 2008以来)。 它最近已迁移到SQL Server 2014。 问题 在我的开发机器上,与测试系统一样,我们对解决方案没有任何问题。 在客户系统上,调用Web服务的线程由于某种原因从不执行。 我可以从日志文件中看到一切正常,直到线程执行。 没有特定的错误,没有。 我们一直在尝试更改权限,但没有成功。 因此,我认为这不是一个许可问题。 问题 有谁知道如何改变这种行为? 我们找不到任何可能起作用的配置。 完全删除线程,并直接在SQL Server主线程上调用Web服务是不是一个好主意? 谢谢你的任何建议,彼得

什么是SQL Server CLR集成生命周期?

如何在SQL Server中管理CLR(.NET)对象? SQL Server中任何CLR代码的入口点都是静态方法。 通常,您只会创建该方法范围内的对象。 但是,您可以设想在静态成员中存储对象的引用,让它们转义方法调用范围。 如果SQL Server在多个存储过程/函数调用中将这些对象保留在内存中,那么它们对于缓存应用程序可能很有用 – 尽管它们也更危险。 SQL Server如何处理这个问题? 它甚至允许(非方法)静态成员吗​​? 如果是这样,它在记忆中保留了多长时间? 在每次CLR呼叫之后垃圾收集所有内容吗? 它如何处理并发?

DELETE语句与具有Entity Framework的SAME TABLE REFERENCE约束冲突

我有一个带有自引用的表,其中ParentId是ID(PK)的FK。 使用EF(代码优先),我建立了如下关系: this.HasOptional(t => t.ParentValue) .WithMany(t => t.ChildValues) .HasForeignKey(t => t.ParentId); 当我尝试删除子节点及其父节点时,DELETE命令对数据库的EF问题不按我预期的顺序 – 它首先尝试删除父节点。 我意识到我在这里有几个选项(我都不喜欢): 首先删除子记录,执行完整保存/提交,然后删除父记录。 由于我的模型的复杂性和维护它的逻辑,这不是一个选项 – 不能随时发出多个提交命令。 在删除任何内容之前解散关系。 这似乎是一个更明智的解决方案,但同样,我必须在DELETE之前使用UPDATE语句发出单独的提交。 我想避免多次保存/提交调用。 在删除父记录之前,使用触发器删除子项。 但我想尽可能避免触发器及其有问题的性质。 所以问题是..有没有办法在父记录之前强制删除子项? 也许我错过了一种明确的方式告诉EF它需要在父母之前照顾这些孩子? 也许有一种方法可以指示EF按ID的降序删除? 我不知道……想法?