我通过一个带有各种参数的对象发送给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'”
有人可以帮助我解决上述问题吗?任何帮助将不胜感激。
答案 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);