Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从存储过程返回值_C#_Sql Server_Linq - Fatal编程技术网

C# 从存储过程返回值

C# 从存储过程返回值,c#,sql-server,linq,C#,Sql Server,Linq,我在数据库中有: ALTER PROCEDURE [dbo].[uspConsumeEnrollments] (--@File NVARCHAR(300), @XML XML, @FamilySent INT = 0 OUTPUT) AS BEGIN SELECT @FamilySent = 755; 在这里,我尝试下载数据: public int Create(FamilyModel model) { try { var X

我在数据库中有:

ALTER PROCEDURE [dbo].[uspConsumeEnrollments]
    (--@File NVARCHAR(300),
     @XML XML,
     @FamilySent INT = 0 OUTPUT)
AS
BEGIN
    SELECT @FamilySent = 755;
在这里,我尝试下载数据:

public int Create(FamilyModel model)
{
    try
    {
        var XML = model.GetEnrolmentFromModel().Serialize();
        var RV = -99;
        var familySent = 0;

        using (var imisContext = new ImisDB())
        {
            var returnParameter = new SqlParameter("@RV", SqlDbType.Int);
            returnParameter.Direction = ParameterDirection.Output;

            var xmlParameter = new SqlParameter("@XML", XML);
            xmlParameter.DbType = DbType.Xml;

            var familySentParameter = new SqlParameter("@FamilySent", SqlDbType.Int);
            familySentParameter.Value = 0;
            familySentParameter.Direction = ParameterDirection.Output;

            var sql = "exec @RV = uspConsumeEnrollments @XML, @FamilySent";

            SqlParameter[] myParams = { returnParameter, xmlParameter, familySentParameter };

            var result = imisContext.Database.ExecuteSqlCommand(sql, myParams);

            RV = (int)returnParameter.Value;
            Debug.WriteLine("RV: " + RV);

            try
            {
                familySent = (int)familySentParameter.Value;
            }
            catch { }
            Debug.WriteLine("familySent: " + familySent);
        }

        return RV;
    }
    catch (SqlException e)
    {
    }
}
对程序的引用是有效的,因为我得到了RV

我对
FamilySent
有问题:我没有得到任何值

在上面的例子中,我有
@FamilySent=755

应将其返回并在中显示

Debug.WriteLine("familySent:" + familySent);
但它不起作用。

请尝试以下方法:

存储过程的修改版本:

ALTER PROCEDURE [dbo].[uspConsumeEnrollments](
--@File NVARCHAR(300),
@XML XML,
@FamilySent INT = 0 OUTPUT
)
AS
BEGIN

SELECT @FamilySent = 755 as FamilySent;
C#代码:

public int创建(FamilyModel模型)
{
尝试
{
var XML=model.GetEnrolmentFromModel().Serialize();
var-RV=-99;
var familySent=0;
使用(SqlConnection cnx=newsqlconnection(connexionString))
使用(SqlCommand cmd=newsqlcommand(“[dbo].[uspconsumerentrollments]”,cnx))
{
cmd.CommandType=CommandType.storedProcess;
var xmlParameter=newsqlparameter(“@XML”,XML);
xmlParameter.DbType=DbType.Xml;
cmd.Parameters.Add(xmlParameter);
var familySentParameter=new-SqlParameter(@FamilySent”,SqlDbType.Int);
familySentParameter.Value=0;
familySentParameter.Direction=ParameterDirection.Output;
cmd.Parameters.Add(familySentParameter);
cnx.Open();
List res=新列表();
使用(SqlDataReader=cmd.ExecuteReader())
{
if(reader.HasRows)
{
while(reader.Read())
{
对于(int i=0;i0){
foreach(res中的字符串[]s){
RV=s[1];
打破
}
}
}
cnx.Close();
返回RV;
}
捕获(SQLE异常)
{
}
}
请尝试以下方法:

存储过程的修改版本:

ALTER PROCEDURE [dbo].[uspConsumeEnrollments](
--@File NVARCHAR(300),
@XML XML,
@FamilySent INT = 0 OUTPUT
)
AS
BEGIN

SELECT @FamilySent = 755 as FamilySent;
C#代码:

public int创建(FamilyModel模型)
{
尝试
{
var XML=model.GetEnrolmentFromModel().Serialize();
var-RV=-99;
var familySent=0;
使用(SqlConnection cnx=newsqlconnection(connexionString))
使用(SqlCommand cmd=newsqlcommand(“[dbo].[uspconsumerentrollments]”,cnx))
{
cmd.CommandType=CommandType.storedProcess;
var xmlParameter=newsqlparameter(“@XML”,XML);
xmlParameter.DbType=DbType.Xml;
cmd.Parameters.Add(xmlParameter);
var familySentParameter=new-SqlParameter(@FamilySent”,SqlDbType.Int);
familySentParameter.Value=0;
familySentParameter.Direction=ParameterDirection.Output;
cmd.Parameters.Add(familySentParameter);
cnx.Open();
List res=新列表();
使用(SqlDataReader=cmd.ExecuteReader())
{
if(reader.HasRows)
{
while(reader.Read())
{
对于(int i=0;i0){
foreach(res中的字符串[]s){
RV=s[1];
打破
}
}
}
cnx.Close();
返回RV;
}
捕获(SQLE异常)
{
}
}

它会引发异常吗?您是否尝试过调试它?此外,您应该使用读卡器从存储的数据中获取数据procedure@taktakFamilySent获取空值。您可以对读取器多说些什么吗?读取器会让您循环存储过程的结果。这样您就可以得到所需的所有结果。我会尽力给您一个答案你可以test@taktak好的,我正在等待我的解决方案,别忘了完成我的代码,我只给了你捕获数据的方法。它会引发异常吗?你试过调试它吗?另外,你应该使用一个读卡器从你存储的数据中获取数据procedure@taktakFamilySent获取空值。您可以说一些关于读者的更多信息吗?读者使您可以循环存储过程的结果。这样您就可以得到所需的所有结果。我将尽力给您一个您可以得到的答案test@taktak好的,我正在等待我的解决方案,别忘了完成我的代码,我只给了你捕获数据的方法。我编辑了我的代码,我删除了参数@RV,因为它完全没有用。我还更正了d您的存储过程因为您可以为返回的FamilySent命名I编辑了我的代码,我删除了参数@RV,因为它完全没有用处。我还更正了您的存储过程,因为您可以为返回的FamilySent命名