【问题标题】:Using variables in SqlCommand inserts in Entity Framework 6在 Entity Framework 6 中使用 SqlCommand 中的变量插入
【发布时间】:2015-05-16 23:55:56
【问题描述】:

我在 C# 中使用 Visual Studio 2013。我正在尝试使用SqlCommand 插入类似于存储过程的数据。如果我用真实数据而不是变量替换值,则下面的代码可以工作,但是当我尝试使用变量时,我得到了这个错误:

EntityFramework.SqlServer.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常
附加信息:必须声明标量变量“@cashmemo”。

这是我的代码:

dbContext.Database.ExecuteSqlCommand("INSERT INTO CashAccounts(CashDate,CashMemo,CashDebit,CashCredit)VALUES(Getdate(),@cashmemo,@cashcredit,@cashdebit)");

SqlCommand sqlCom = new SqlCommand();
sqlCom.Parameters.Add("@cashmemo", SqlDbType.NVarChar);
sqlCom.Parameters.Add("@cashcredit", SqlDbType.Decimal);
sqlCom.Parameters.Add("@cashdebit", SqlDbType.Decimal);

sqlCom.ExecuteNonQuery();

【问题讨论】:

  • 查看:[如何将 DbContext.Database.SqlQuery(sql, params) 与存储过程一起使用? EF 代码优先 CTP5][1] [1]:stackoverflow.com/questions/4873607/…
  • 查看:[如何将 DbContext.Database.SqlQuery(sql, params) 与存储过程一起使用? EF 代码优先 CTP5][1] [1]:stackoverflow.com/questions/4873607/…
  • 未设置您的CommandText 属性SqlCommand - 将其设置为SQL 查询字符串。另外:如果您使用的是 EF - 为什么要诉诸“原始” ADO.NET SqlCommand 处理?
  • EF 不适合在同一个事务中创建多个对数据库的插入,但它适用于其他普通类

标签: c# sql-server entity-framework


【解决方案1】:

事实证明,我不需要使用变量,而是使用来自 windows 窗体的列值,如下所示:

dbContext.Database.SqlQuery<CashAccount>("INSERT INTO CashAccounts(CashFK,CashDate,CashMemo,CashDebit,CashCredit)VALUES(Getdate(),cashmemos,cashcredits,cashdebits)"); 

【讨论】:

  • 这里有些异味;这是一种非常容易出错的插入方式,并且容易受到 SQL 注入攻击;此外,dbContext 有更简单的插入方法。
  • 我正在测试使用原始 sql 进行多次插入的正确方法,除非您知道不使用存储过程的更好方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 2021-11-27
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多