【问题标题】:ExecuteSqlCommand timing out [closed]ExecuteSqlCommand 超时[关闭]
【发布时间】:2018-04-02 22:22:44
【问题描述】:
db.Database.ExecuteSqlCommand("INSERT INTO [dbo].[CalendarEvent] (Length, Name) VALUES ('" + item.Length + "," + item.Name.Replace("'", "''") + "')");

我试图在 C# Entity Framework 中的数据库表中添加一行,但执行语句在运行前一直超时。 (好吧,我相信超时,因为它只是停止运行。

我已经分别尝试了两种插入(例如名称和长度)并且两者都可以工作,但是当它们一起失败时。我也尝试插入一个,然后尝试更新该行,但以同样的方式失败。

【问题讨论】:

  • 那行代码前面,放var bob = "INSERT INTO [dbo].[CalendarEvent] (Length, Name) VALUES ('" + item.Length + "," + item.Name.Replace("'", "''") + "')";bob的值是多少?
  • 我觉得您的方法 -sql insert 语句没有使用 ORM(实体框架)的优势。我建议对实体框架进行一些研究。
  • Bob 的值为 "INSERT INTO [dbo].[CalendarEvent] (Length, Name) VALUES ('3,Josh Test')" @mjiwills
  • @JohsFletcher 您列出了两列(LengthName),但只插入了其中一列(逗号在 inside 引号内)。阅读我提供的链接。或者阅读如何使用 EF 插入对象。 stackoverflow.com/questions/8835434/… 之类的东西。

标签: c# sql asp.net entity-framework


【解决方案1】:

您的电话需要额外的引号。我删除了数字数据类型的那个。

db.Database.ExecuteSqlCommand("INSERT INTO [dbo].[CalendarEvent] (Length, Name) VALUES (" + item.Length + ",'" + item.Name.Replace("'", "''") + "')");

话虽如此,您想到了一些问题。 SQL 注入是首要的。

我建议您使用实体框架来创建一个 CalendarEvent 对象,而不是使用它的属性。通过 EF 设计器创建类后,它应该如下所示:

CalendarEvent ce = new CalendarEvent();
context.Entry(ce).State = EntityState.Added; 
ce.Length = item.Length; // I'm assuming this is some number data type.
ce.Name = item.Name; // No replace needed
db.SaveChanges();

我还想提一下,不确定您是否有自动生成的 PK(或根本没有)。还认为保存字段长度很奇怪。使用 LEN 函数 (https://www.techonthenet.com/sql_server/functions/len.php) 从 SQL 中获取它很容易。

【讨论】:

  • 好的,已经解决了这个问题,现在可以使用了。我也改为使用 EF 设计器,所以很多。此外,需要设置长度,因为它是特定事件类型的长度。
猜你喜欢
  • 1970-01-01
  • 2013-02-13
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 2021-05-17
  • 2013-05-16
  • 2017-03-22
相关资源
最近更新 更多