C# 在web api中执行存储过程时获取空值,但在MSSQL中获取结果

C# 在web api中执行存储过程时获取空值,但在MSSQL中获取结果,c#,sql-server,C#,Sql Server,我有一个存储过程,它在MSSql服务器中为我提供这个输出 所以我创建了一个类来捕获这个输出,如下所示: public class OwnerInfo { public string UnitName { get; set; } public string UnitOwner { get; set; } } public class FirstInfo { public string TType { get; set; } public string Transa

我有一个存储过程,它在MSSql服务器中为我提供这个输出

所以我创建了一个类来捕获这个输出,如下所示:

public class OwnerInfo
{
    public string UnitName { get; set; }
    public string UnitOwner { get; set; }
}
public class FirstInfo
{
    public string TType { get; set; }
    public string TransactionType { get; set; }
    public string Period_Covered { get; set; }
    public double? BillAmount { get; set; }
    public double? PaymentAmount { get; set; }
    public double? Balance { get; set; }
}
public class SecondInfo
{
    public string TType { get; set; }
    public string TransactionType { get; set; }
    public string Period { get; set; }
    public double? BillAmount { get; set; }
    public double? PaymentAmount { get; set; }
    public double? Balance { get; set; }
}
public class ThirdInfo
{
    public string TType { get; set; }
    public string TransactionType { get; set; }
    public string Period { get; set; }
    public double? PaymentAmount { get; set; }
}
public class FourthInfo
{
    public string TType { get; set; }
    public string Particulars { get; set; }
    public string PaymentDate { get; set; }
    public double? PaymentAmount { get; set; }
    public string ORNumber { get; set; }
}
public class DisplaySoa
{
    public OwnerInfo OwnerInfo { get; set; }
    public List<FirstInfo> FirstInfo { get; set; }
    public List<SecondInfo> SecondInfo { get; set; }
    public List<ThirdInfo> ThirdInfo { get; set; }
    public List<FourthInfo> FourthInfo { get; set; }
}
public class DisplaySoaParameter
{
    public int UnitID { get; set; }
    public int Month { get; set; }
    public int Year { get; set; }
}
公共类所有者信息
{
公共字符串UnitName{get;set;}
公共字符串UnitOwner{get;set;}
}
公共类第一信息
{
公共字符串类型{get;set;}
公共字符串事务类型{get;set;}
公共字符串周期{get;set;}
公共双?BillAmount{get;set;}
公共双?支付金额{get;set;}
公共双平衡{get;set;}
}
公共类第二信息
{
公共字符串类型{get;set;}
公共字符串事务类型{get;set;}
公共字符串周期{get;set;}
公共双?BillAmount{get;set;}
公共双?支付金额{get;set;}
公共双平衡{get;set;}
}
公共类第三信息
{
公共字符串类型{get;set;}
公共字符串事务类型{get;set;}
公共字符串周期{get;set;}
公共双?支付金额{get;set;}
}
公共类第四信息
{
公共字符串类型{get;set;}
公共字符串详细信息{get;set;}
公共字符串PaymentDate{get;set;}
公共双?支付金额{get;set;}
公共字符串或编号{get;set;}
}
公共类显示SOA
{
公共所有者信息所有者信息{get;set;}
公共列表第一信息{get;set;}
公共列表第二信息{get;set;}
公共列表第三信息{get;set;}
公共列表FourthInfo{get;set;}
}
公共类显示SOAPParameter
{
public int UnitID{get;set;}
公共整数月{get;set;}
公共整数年{get;set;}
}
我从数据库中获取它的方式是在我的控制器中,我调用存储过程如下:

const string query = "[dbo].[DISPLAY_SOA_V4] @UnitID, @Month, @Year";
            using(var db = new ApplicationDbContext())
            {

                try
                {
                    //const string query = "[dbo].[DUES_AUTO_PAYMENT] @PaymentAmount @PaymentTypeID @ORNumber @UnitID @CurrentDateTime";
                    object[] parameter =
                    {
                        new SqlParameter
                        {
                            ParameterName = "@UnitID",
                            Value = model.UnitID,
                            Direction = ParameterDirection.Input,
                            SqlDbType = SqlDbType.Int
                        },
                        new SqlParameter
                        {
                            ParameterName = "@Month",
                            Value = model.Month,
                            Direction = ParameterDirection.Input,
                           SqlDbType = SqlDbType.Int
                        },
                        new SqlParameter
                        {
                            ParameterName = "@Year",
                            Value = model.Year,
                            Direction = ParameterDirection.Input,
                            SqlDbType = SqlDbType.Int
                        }
                    };

                    var x = db.Database.SqlQuery<DisplaySoa>(query, parameter).ToList();
                    return x;
                }
                catch (Exception ed)
                {
                    return null;
                }
            }
const string query=“[dbo].[DISPLAY\u SOA\u V4]@UnitID、@Month、@Year”;
使用(var db=new ApplicationDbContext())
{
尝试
{
//const string query=“[dbo].[DUES\u AUTO\u PAYMENT]@PaymentAmount@PaymentTypeID@ORNumber@UnitID@CurrentDateTime”;
对象[]参数=
{
新的SqlParameter
{
ParameterName=“@UnitID”,
值=model.UnitID,
方向=参数方向。输入,
SqlDbType=SqlDbType.Int
},
新的SqlParameter
{
ParameterName=“@Month”,
值=型号。月份,
方向=参数方向。输入,
SqlDbType=SqlDbType.Int
},
新的SqlParameter
{
ParameterName=“@Year”,
值=车型年份,
方向=参数方向。输入,
SqlDbType=SqlDbType.Int
}
};
var x=db.Database.SqlQuery(查询,参数).ToList();
返回x;
}
捕获(例外编辑)
{
返回null;
}
}
但在我的“x”值中,我得到null,如下所示:


当我使用.FirstOrDefault()时就是这个图像。但是如果我使用.ToList(),我会得到一个1的计数,但是没有插入任何内容。你能帮我一下吗?多谢各位

您的sp正在返回多个结果集

var x = db.Database.SqlQuery<DisplaySoa>(query, parameter).ToList();
var x=db.Database.SqlQuery(查询,参数).ToList(); 从这一点上,你无法处理


请阅读这篇文章了解如何做到这一点。

请看这里:如果您能在问题中包含存储过程的定义,那将是非常棒的。对于这个答案,您会感到惊讶。我仍然有一些类似这样的问题:“访问数据库时出错。这通常意味着与数据库的连接失败。检查连接字符串是否正确,以及是否正在使用适当的DbContext构造函数来指定它或在应用程序的配置文件中查找它。有关DbContext和连接的信息,请参见。有关失败的详细信息,请参见内部异常。但我想我应该问另一个问题。