gpt4 book ai didi

c# - 调用 dbcontext.Database.ExecuteSqlCommand 时发生了什么?

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:43 25 4
gpt4 key购买 nike

我正在使用数据库中的 Entity Framework Code First。我正在尝试运行现有的未映射存储过程,使用 dbcontext.Database.ExecuteSqlCommand,根据从 JSON 传入的值动态创建查询和参数数组(有许​​多可选参数)。我不期待返回值。

当我从我的服务进行测试时,我从存储过程中抛出 SqlExceptions:

Cannot insert the value NULL into column 'yyyyww', table 'dbname.dbo.table'; column does not allow nulls.

但是当我使用 SSMS '12 中的相同值运行相同的查询时,没有任何错误。该表实际上允许该列为空值。

exec [dbname].[dbo].[storedproc] @yyyymm = 201409, @s_id = 75

传递可选的字符串参数会导致有关将 nvarchar 转换为 int 的异常,这在存储过程中不会发生。我尝试了几种不同的方法来设置调用,但它们都抛出相同的异常。

版本 1:

string query1 = "exec [dbname].[dbo].[storedproc] @yyyymm, @s_id";

List<SqlParameter> parms1 = new List<SqlParameter>();
parms1.Add(new SqlParameter("@yyyymm", obj.yyyymm));
parms1.Add(new SqlParameter("@s_id", obj.s_Id));

db.Database.ExecuteSqlCommand(query, parms1.ToArray());

版本 2:

string query2 = "exec [dbname].[dbo].[storedproc] @yyyymm, @s_id";

var month = new SqlParameter("yyyymm", SqlDbType.Int);
month.Value = obj.yyyymm;
var s_id = new SqlParameter("s_id", SqlDbType.Int);
s_id.Value = obj.s_Id;

List<SqlParameter> parms2 = new List<SqlParameter>();
parms2.Add(month);
parms2.Add(s_id);

db.Database.ExecuteSqlCommand(query, parms2.ToArray());

版本 3:

string query3 = "exec [dbname].[dbo].[storedproc] @yyyymm = {0}, @s_id = {1}";
db.Database.ExecuteSqlCommand(query3, obj.yyyymm, obj.s_Id);

对正在发生的事情有什么想法 - 为什么值(value)观会受到不同对待?有更好的方法吗?

最佳答案

这是我使用过的一些代码的工作示例:

public int SalesByCategory(string categoryName, string ordYear)
{
var categoryNameParameter = categoryName != null ?
new SqlParameter("@CategoryName", categoryName) :
new SqlParameter("@CategoryName", typeof (string));

var ordYearParameter = ordYear != null ?
new SqlParameter("@OrdYear", ordYear) :
new SqlParameter("@OrdYear", typeof (string));

return Database.ExecuteSqlCommand("SalesByCategory @CategoryName, @OrdYear", categoryNameParameter, ordYearParameter);
}

如果该结构由于某种原因不起作用,请尝试打开 SQL 事件探查器以查看到底发生了什么。


编辑:
我最初从 this awesome project 获得此代码由龙乐。我已经使用该框架一段时间了,它非常棒。

关于c# - 调用 dbcontext.Database.ExecuteSqlCommand 时发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32194133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com