我有以下工作代码。这有1个输入和2个输出参数。我应该使用哪种ado.net方法?
OneInputTwoOutput oneInputTwoOutput = new OneInputTwoOutput();
var Param = new DynamicParameters();
Param.Add("@Input1", Input1);
Param.Add("@Output1", dbType: DbType.Boolean, direction: ParameterDirection.Output);
Param.Add("@Output2", dbType: DbType.Boolean, direction: ParameterDirection.Output);
try
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["connectionString"]))
{
using (SqlCommand cmd = new SqlCommand("GetOneInputTwoOutput", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Input1", SqlDbType.Int).Value = Input1;
cmd.Parameters.Add("@Output1", SqlDbType.Bit).Direction = ParameterDirection.Output;
cmd.Parameters.Add("@Output2", SqlDbType.Bit).Direction = ParameterDirection.Output;
con.Open();
dealerStatus.Output1= (cmd.Parameters["@Output1"].Value != DBNull.Value ? Convert.ToBoolean(cmd.Parameters["@Output1"].Value) : false);
dealerStatus.Output2= (cmd.Parameters["@Output2"].Value != DBNull.Value ? Convert.ToBoolean(cmd.Parameters["@Output2"].Value) : false);
con.Close();
}
}
}
catch (SqlException err)
{
}
我读了这个链接: Get output parameter value in ADO.NET
这建议使用cmd.ExecuteNonQuery()
。但即使不使用此cmd.ExecuteNonQuery()
,我也可以设置输出参数。
有人可以解释一下吗?那应该用什么?
答案 0 :(得分:2)
非常简单,真的:
如果您想返回结果集,其中恰好是一行,一列(例如来自SELECT COUNT(*)...
操作或类似内容),然后使用ExecuteScalar()
(简而言之:结果集 - 一行,一列)
如果您想要返回包含多行,多列的结果集,请使用ExecuteReader()
返回SqlDataReader
,然后可以使用该ExecuteNonQuery()
进行迭代通过返回的行,并获取所有数据(简而言之:结果集 - 多行,每行多列)
如果还有其他内容(如果您运行不会返回任何结果集的命令),则使用INSERT
。这通常用于UPDATE
,DELETE
和void resize() {
size_t newSize = size * 2;
int* newArr = new int[newSize];
memcpy( newArr, arr, size * sizeof(int) );
size = newSize;
delete [] arr;
arr = newArr;
}
操作,但如果您的查询只是没有返回结果集,但设置了一些输出参数(简而言之:没有返回结果集)