SQL SELECT与存储过程和参数?

Dan*_* C. 0 c# sql web-services sql-server-2008 web

我一直在编写很多基于存储过程的SQL插入的Web服务,而且我还没有真正使用任何SELECTS.

SELECT我想到的那个很简单.

SELECT COUNT(AD_SID) As ReturnCount FROM AD_Authorization
WHERE AD_SID = @userSID
Run Code Online (Sandbox Code Playgroud)

但是,根据我当前的INSERT代码,我无法弄清楚如何将其变为a SELECT并返回...的值ReturnCount...你能帮忙吗?这是我的INSERT代码:

string ConnString = "Data Source=Removed";
string SqlString = "spInsertProgress";

using (OleDbConnection conn = new OleDbConnection(ConnString))
{
   using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
   {
      cmd.CommandType = CommandType.StoredProcedure;
      cmd.Parameters.AddWithValue("attachment_guid", smGuid.ToString());
      cmd.Parameters.AddWithValue("attachment_percentcomplete", fileProgress);
      conn.Open();
      cmd.ExecuteNonQuery();
      conn.Close();
   }
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 6

这是你出错的地方:

cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

正在执行查询.

你需要ExecuteReaderExecuteScalar代替.ExecuteReader用于结果集(多行/列),ExecuteScalar当查询返回单个结果时(它返回object,因此需要将结果强制转换为正确的类型).

var result = (int)cmd.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

results变量现在将包含一个OledbDataReader或一个带有结果的值SELECT.您可以迭代结果(对于读者)或标量值(对于标量).

  • 或者,如果返回单行,单列(如此处的`COUNT`):`..ExecuteScalar()` (4认同)