当我使用sql存储过程运行以下代码时,我得到-1而不是正确的结果。代码有什么问题?请帮忙。
ALTER PROCEDURE GetTopMaterial
AS
BEGIN
SELECT TOP (1) MaterialId
FROM Materials
END
public static int GetTopMaterial()
{
SqlHelper objSqlHelper = new SqlHelper();
return (int)objSqlHelper.ExecuteScalar("GetTopMaterial");
}
int id =Cart.GetTopMaterial()
public object ExecuteScalar (string query)
{
SqlConnection cnn = new SqlConnection (strConnectionString);
SqlCommand cmd = new SqlCommand (query, cnn);
if (query.StartsWith ("SELECT") | query.StartsWith ("select"))
{
cmd.CommandType = CommandType.Text;
}
else
{
cmd.CommandType = CommandType.StoredProcedure;
}
cnn.Open ();
object retval = cmd.ExecuteNonQuery ();
cnn.Close ();
return retval;
}
public object ExecuteScalar(string query, params SqlParameter[] parameters)
{
SqlConnection cnn = new SqlConnection(strConnectionString);
SqlCommand cmd = new SqlCommand(query, cnn);
if (query.StartsWith("SELECT") | query.StartsWith("select"))
{
cmd.CommandType = CommandType.Text;
}
else
{
cmd.CommandType = CommandType.StoredProcedure;
}
for (int i = 0; i <= parameters.Length - 1; i++)
{
cmd.Parameters.Add(parameters[i]);
}
cnn.Open();
object retval = cmd.ExecuteScalar();
cnn.Close();
return retval;
}
因此,您ExecuteScalar
实际上正在包装ExecuteNonQuery
。从MSDN上获取ExecuteNonQuery:
对于UPDATE,INSERT和DELETE语句,返回值是该命令影响的行数。当要插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也为-1。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句