ADO.NET 使用什么来设置多个输出参数 - ExecuteScalar、ExecuteReader 或 ExecuteNonQuery 还是什么都没有?
ADO.NET what to use to set multiple output parameters - ExecuteScalar, ExecuteReader or ExecuteNonQuery or nothing?
我有以下工作代码。这有 1 个输入和两个输出参数。我应该使用哪种 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)
{
}
我读了这个link:
Get output parameter value in ADO.NET
这建议使用 cmd.ExecuteNonQuery()
。但即使不使用这个 cmd.ExecuteNonQuery()
,我也可以设置输出参数。
有人可以解释一下吗?这里应该用什么?
很简单,真的:
如果你想return一个结果集 正好是一行,一列 (例如来自 SELECT COUNT(*)...
操作或类似的操作),然后使用 ExecuteScalar()
(简而言之:结果集 - 一行,一列)
如果你想return一个多行多列的结果集 - 然后使用ExecuteReader()
到return 一个 SqlDataReader
然后可用于遍历行 returned,并获取所有数据(简而言之:结果集 - 多行,每行多列)
如果有其他情况(如果您 运行 一个 没有 return 任何结果集的命令,则使用 ExecuteNonQuery()
。这通常用于 INSERT
、UPDATE
和 DELETE
操作,但如果您的查询没有 return 结果,也可以使用它set,而是设置一些输出参数(简而言之:无结果集returned)
我有以下工作代码。这有 1 个输入和两个输出参数。我应该使用哪种 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)
{
}
我读了这个link: Get output parameter value in ADO.NET
这建议使用 cmd.ExecuteNonQuery()
。但即使不使用这个 cmd.ExecuteNonQuery()
,我也可以设置输出参数。
有人可以解释一下吗?这里应该用什么?
很简单,真的:
如果你想return一个结果集 正好是一行,一列 (例如来自
SELECT COUNT(*)...
操作或类似的操作),然后使用ExecuteScalar()
(简而言之:结果集 - 一行,一列)如果你想return一个多行多列的结果集 - 然后使用
ExecuteReader()
到return 一个SqlDataReader
然后可用于遍历行 returned,并获取所有数据(简而言之:结果集 - 多行,每行多列)如果有其他情况(如果您 运行 一个 没有 return 任何结果集的命令,则使用
ExecuteNonQuery()
。这通常用于INSERT
、UPDATE
和DELETE
操作,但如果您的查询没有 return 结果,也可以使用它set,而是设置一些输出参数(简而言之:无结果集returned)