无法将类型'int'隐式转换为'System.Data.Dataset' - 返回SQL所需的结果

时间:2013-10-20 09:00:26

标签: c# sql

我通过一个带有各种参数的对象发送给SQL,需要接收0或1的值,以表示成功或失败。

我已经确认我的所有参数都已成功发送到SQL,但是我遇到了需要返回到C#的“@Result”值的问题。

以下是Data.cs文件中代码的摘录:

    public System.Data.DataSet spe_ISUpgradePossible(dbObject  currentDBObj)
    {
        using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(ConnectionString))
        {
            using (System.Data.SqlClient.SqlCommand command = GetCommand("spe_ISUpgradePossible", connection))
            {
                command.CommandType = System.Data.CommandType.StoredProcedure;
                System.Data.SqlClient.SqlParameter parameter;

                parameter = new System.Data.SqlClient.SqlParameter("@ServicePack", System.Data.SqlDbType.NVarChar);
                parameter.Direction = System.Data.ParameterDirection.Input;
                parameter.Value = currentDBObj.servicePack;
                command.Parameters.Add(parameter);

                parameter = new System.Data.SqlClient.SqlParameter("@ServicePackFolder", System.Data.SqlDbType.NVarChar);
                parameter.Direction = System.Data.ParameterDirection.Input;
                parameter.Value = currentDBObj.servicePackFolder;
                command.Parameters.Add(parameter);

                parameter = new System.Data.SqlClient.SqlParameter("@Result", System.Data.SqlDbType.Int);
                parameter.Direction = System.Data.ParameterDirection.Output;
                command.Parameters.Add(parameter);

                System.Data.DataSet dataSet = new System.Data.DataSet();
                System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(command);
                adapter.Fill(dataSet);
                return dataSet;

                //int result = Convert.ToInt16(command.Parameters["@Result"].Value.ToString());
                //return result;
            }
        }
    }    

我添加了以下两行来迎合“@Result”:

                        //int result = Convert.ToInt16(command.Parameters["@Result"].Value.ToString());
                //return result;

这导致显示以下错误:“无法将类型'int'隐式转换为'System.Data.Dataset'”

有人可以帮助我解决上述问题吗?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要声明返回int而不是dataset

的函数

更改此

public System.Data.DataSet spe_ISUpgradePossible(dbObject  currentDBObj)

进入这个

public int spe_ISUpgradePossible(dbObject  currentDBObj)

答案 1 :(得分:0)

您的方法需要返回的数据集不是整数

问题在于

 return result; // an integer

方法陈述

 public System.Data.DataSet spe_ISUpgradePossible(dbObject  currentDBObj)

因此您需要决定返回主叫代码的内容 我觉得您需要这两个信息,如果是这种情况,那么您可以使用out parameter

更改方法签名
 public System.Data.DataSet spe_ISUpgradePossible(dbObject  currentDBObj, out int result)
 {
     ......
     // Assign the output parameter to the output variable passed in the method call
     result = Convert.ToInt32(command.Parameters["@Result"].Value.ToString());
     return dataSet;
 }

另请注意,您将output参数声明为integer类型,但随后将其转换为short int(Convert.ToInt16)。这没有意义(为什么失去精度?)因此最好坚持使用输出参数的原始数据类型(Convert.ToInt32

在这些更改之后,您需要替换调用代码以反映新的方法签名,并且绝对确保您的spe_ISUpgradePossible在没有初始化输出参数的情况下不会返回到调用代码

 // No intialization here is needed, the out keyword forces the compiler to check
 // for every possible code path in the called method that return without `result` initialized
 int result;  
 Dataset ds = spe_ISUpgradePossible(yourObject, out result);