Tag: sql server

EF启动速度极慢 – 15分钟

前段时间我创建了一个系统,用户可以使用自定义文件为某些对象定义类别。 然后,每个对象都具有基于其类别的FieldValue。 以下课程: public class DbCategory { public int Id { get; set; } [Required] public string Name { get; set; } [Required] public TextDbField MainField { get; set; } public List Fields { get; set; } } public class DbObject { public int Id { get; set; } public byte[] Bytes { get; set; […]

“TransactionInDoubtException”exception导致我的事务的完整性丢失

我有一个代码尝试插入作用于MSDTC事务的条目,如果有插入失败,则重试插入到特定阈值。 这是代码: while(!SaveToDb){ ……. Thread.Sleep(TimeSpan.FromMinutes(AppConfiguration.RetryInsertionDuringFailureIntervalInMin)); } private bool SaveToDb() { try { …… using (var scope = new TransactionScope(TransactionScopeOption.Required, option)) { Context.SaveEmail(_emailInfoList); Context.SaveSyncState(syncState); scope.Complete(); return true; } } catch (Exception ex) { …….. return false; } } 并且遇到了这个exception: 消息:该交易存在疑问。 堆栈跟踪:System.Transactions.TransactionStatePromotedIndoubt.PromotedTransactionOutcome(InternalTransaction tx),位于System.Transactions.CommittableTransaction.Commit(),位于System.Transactions.TransactionScope.InternalDispose(),位于System.Transactions.TransactionScope.Dispose(),位于Presensoft.Exchange2010Puch。 Core.PushJob.SaveEmailAndSyncState()InnerException:System.Data.SqlClient.SqlException(0x80131904):超时已过期。 操作完成之前经过的超时时间或服务器没有响应。 —> System.ComponentModel.Win32Exception(0x80004005):在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning的System.Data.SqlClient.SqlInternalConnection.OnError(SqlExceptionexception,布尔breakConnection,Action`1 wrapCloseInAction)中等待操作超时(TdsParserStateObject stat eObj,Boolean callerHasConnectionLock,Boolean asyncClose)System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync()上的System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj,UInt32错误) 在System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket() 在System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer()at System.Data.SqlClient.TdsParserStateObject.TryReadByte(Byte&value) 在System.Data.SqlClient.TdsParser.TryRun(RunBehavior […]

.mdf文件上的entity framework

我正在做一些项目,我必须使用本地数据库。 所以,我创建了一个新的基于服务的数据库(没有表atm)。 然后我想添加entity framework支持。 因为我以前从未使用过Entity Framework,所以我指的是那个链接: http : //msdn.microsoft.com/en-us/data/jj200620.aspx 。 一切都很好,但这里变得复杂了。 我在其中创建了带有DbSet DataContext类。 但是,当我运行我的unit testing时,表是在Localdb上创建的(不在我的.mdf文件中)。 该怎么办? 我很确定,我确实选择了正确使用哪个数据库(实际上已经执行了3次),但仍然在LocalDb上创建了数据表。 我在这做错了什么? 我是初学者(仅使用教义ORM)。 否则我可以插入数据和所有,它只是在错误的数据库上。

在FROM子句中使用带有参数的存储过程中使用LIKE和%

我正在创建一个托管数据库的网页。 我希望这个网页有一个搜索框function,可以在Visual Studio 2017中为SSMS 2014中的表格更新GridView。 我希望这个GrideView是动态的,因为最终用户可以选择一个表,一列,然后指定一个“searchString”来应用于列中的数据。 网页看起来像这样: 关于代码。 在搜索按钮单击事件上,我希望将三个文本框中的每个文本框中的值传递到存储过程。 这是按钮点击事件的当前代码。 protected void btnSearch_Click(object sender, EventArgs e) { using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[“CID1ConnectionString”].ConnectionString)) { SqlDataAdapter searchAdapter = new SqlDataAdapter(“Search”, con); searchAdapter.SelectCommand.CommandType = CommandType.StoredProcedure; searchAdapter.SelectCommand.Parameters.AddWithValue(“@TableName”, TableSearchBox.Text.Trim()); // passing text in first text box in searchAdapter.SelectCommand.Parameters.AddWithValue(“@columnSpecifier”, ColumnSearchBox.Text.Trim()); // passing text in second text box in searchAdapter.SelectCommand.Parameters.AddWithValue(“@searchString”, searchStringBox.Text.Trim()); […]

在EntityFramework中使用SqlQuery来构成真正的IQueryable

有没有办法让SqlQuery或任何其他sql执行方法组成一个模型对象,并允许像Include这样的方法工作? 我这样做(其中view_products是一个SQL表函数): var p = context.SqlQuery(“select * from view_products(@param1)”, new SqlParameter(“param1”, “somevalue”)); 我想这样做: var list = p.Include(i => i.Inventories).ToList(); 这让我得到了一个DbRawSqlQuery。 这个我不能“包含”,因为你不能在DbRawSqlQuery上做到这一点。 所以,我最后添加一个AsQueryable,如: var p = context.SqlQuery(“select * from view_products(@param1)”, new SqlParameter(“param1”, “somevalue”)).AsQueryable(); 但是,我知道这真的给了我一个IEnumerable,所以.Include不会产生任何结果。 我正在寻找另一种方法的建议,我从SQL函数中获取我的产品,然后加载其相关的Inventory对象,以便我有一个对象图。 谢谢!

EntityFramework LINQ查询计数失败,但查询返回结果。 如何优化LINQ查询?

我有以下LINQ查询执行自我左外连接。 查询看起来有点复杂,但只是简单地进行自我连接(目的是将每条记录与前一个工作日的记录连接起来),然后进行一些参数化过滤。 var newBreakThreshold = decimal.Parse(WebConfigurationManager.AppSettings[“NewBreakThreshold”]); using (var dbContext = new NavFoToBoCompareDbContext()) { var query = from current in dbContext.NAVSummaries let currentWD = SqlFunctions.DatePart(“dw”, current.ValueDate) let currentPD = DbFunctions.AddDays(current.ValueDate, currentWD == 2 ? -3 : currentWD == 1 ? -2 : -1).Value join previous in dbContext.NAVSummaries on new { current.Portfolio, PD = currentPD } equals […]

NHibernate – 如何解决SQL Server中的参数计数限制

我有一个网站,以简单的表格forms显示SQL Server的数据,包括filter,排序,页面导航等。我使用Fluent NHibernate作为ORM,查询代码如下所示: public IList GetResults(UserCommand command) { var result = Session.Query(); if (command.Ids != null) result = result.WhereRestrictionOn(o => o.Id).IsIn(command.Ids); // … other filters … return result.Skip(command.Page * command.PageSize).Take(command.PageSize).List(); } 问题是command.Ids (和一些其他输入参数)可能包含很多值。 如果数量超过2100,则查询执行失败,并显示以下错误 System.Data.SqlClient.SqlException: The incoming request has too many parameters. The server supports a maximum of 2100 parameters. Reduce the number of parameters […]

将列表插入表

我有这种方法将新公司插入数据库但我有List问题,因为我希望能够为公司插入多个联系人。 有人能帮帮我吗? public static bool AddNewCompany(Company company,List contact , Location local) { // get a configured DbCommand object DbCommand comm = GenericDataAccess.CreateCommand(); // Set the stored procedure name comm.CommandText = “AddNewCompany”; //create new parameter @CompanyName DbParameter param = comm.CreateParameter(); param.ParameterName = “@CompanyName”; param.Value = company.CompanyName; param.DbType = DbType.StringFixedLength; comm.Parameters.Add(param); //create new parameter @CompanyDetail param = […]

entity framework和SCOPE_IDENTITY

我有一个插入表中的存储过程然后执行此行 SET @returnVal = SCOPE_IDENTITY(); 之后我尝试了两个: SELECT @returnVal 和 return @returnVal 当我从Microsoft SQL Server Management Studio执行存储过程时,我使用SELECT @returnVal获得预期结果 – SELECT @returnVal插入数据的标识列。 但是,当我将存储过程添加到我的ADO.Net实体数据模型/ EntityFramework类/ .edmx类并在我的C#代码中执行存储过程时,我得到的值-1返回但是没有失败。 是否有可能获得我想要的值,新的身份值,返回? 我意识到我可以手动将存储过程绑定到我的模型中表的插入操作 – 但这不是一个选项。 每次重新生成模型类时,都需要执行此手动工作的插入过程太多。

如何获得LINQ to SQL submitchanges的百分比?

我想知道是否有其他人问过类似的问题。 基本上,我有一个巨大的树,我正在使用LINQ对象在RAM中构建,然后我使用DataContext.SubmitChanges()一次性转储它。 它可以工作,但我找不到如何给用户一个目前为止查询进展程度的视觉指示。 如果我最终能够实现某种进度条,即使性能损失很小,这也会很棒。 请注意,我有相当多的行要放入数据库,超过750,000行。 我没有完全定时,但确实需要很长时间才能将它们放入。 编辑:我想我最好先说明我在做什么。 基本上,我正在用指环王建造一个后缀树。 因此,存在许多节点,并且某些节点具有与它们相关联的位置(恰好在后缀的末尾处的节点)。 我正沿着这些线构建Linq对象。 suffixTreeDB.NodeObjs.InsertOnSubmit(new NodeObj() { NodeID = 0, ParentID = 0, Path = “$” }); 在RAM中完全生成后缀树(只需几秒钟)后,我调用suffixTreeDB.submitChanges(); 我想知道的是,如果有更快的方法这样做。 谢谢! 编辑2:我做了一个秒表,显然数据库写入需要6分钟。