Skip to main content

Command

Struct Command 

Source
pub struct Command<'a> { /* private fields */ }
Expand description

A remote command (stored procedure or user-defined function) with bound parameters, executed by name via an RPC request.

Implementations§

Source§

impl<'a> Command<'a>

Source

pub fn new(proc_name: impl Into<Cow<'a, str>>) -> Self

Constructs a new command with the given procedure or function name.

Source

pub fn bind_param( &mut self, name: impl Into<Cow<'a, str>>, data: impl IntoSql<'a> + 'a, )

Binds a scalar input parameter with the given name.

Source

pub fn bind_out_param( &mut self, name: impl Into<Cow<'a, str>>, data: impl IntoSql<'a> + 'a, )

Binds a by-ref (OUT) scalar parameter. The returned value can be found by the same name in the CommandResult returned values.

The value is returned in the type data is sent as. Strings and binary are sent as nvarchar(max)/varbinary(max), so nothing is cut off. A Numeric sets the scale of the result (a None gives scale 0): bind e.g. Numeric::new_with_scale(0, 4) for a decimal(10, 4) parameter.

Source

pub fn bind_table( &mut self, name: impl Into<Cow<'a, str>>, data: impl TableValue<'a> + 'a, )

Binds a table-valued parameter. The provided argument must implement TableValue.

§Example
#[derive(TableValueRow)]
struct SomeGeoList {
    eid: i32,
    lat: Numeric,
    lon: Numeric,
}
let r1 = SomeGeoList {
    eid: 1,
    lat: Numeric::new_with_scale(10, 6),
    lon: Numeric::new_with_scale(14, 6),
};
let r2 = SomeGeoList {
    eid: 4,
    lat: Numeric::new_with_scale(101, 6),
    lon: Numeric::new_with_scale(142, 6),
};

let tbl = vec![r1, r2];

let mut cmd = Command::new("dbo.usp_TheGeoProcedure");
cmd.bind_table("@table", tbl);
Source

pub fn bind_table_with_dbtype( &mut self, name: impl Into<Cow<'a, str>>, db_type: &'a str, data: impl TableValue<'a> + 'a, )

The same as bind_table, but overrides the database type name used for the TVP.

Source

pub async fn exec<'b, S>( self, client: &'b mut Client<S>, ) -> Result<CommandStream<'b>>
where S: AsyncRead + AsyncWrite + Unpin + Send,

Executes the command on the server, returning a CommandStream that can be collected into a CommandResult for convenience.

§Example
let mut cmd = Command::new("dbo.usp_SomeStoredProc");

cmd.bind_param("@foo", 34i32);
cmd.bind_out_param("@bar", "bar");
let res = cmd.exec(&mut client).await?.into_command_result().await?;

let rv: Option<&str> = res.try_return_value("@bar")?;
let rc = res.return_code();

Trait Implementations§

Source§

impl<'a> Debug for Command<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for Command<'a>

§

impl<'a> RefUnwindSafe for Command<'a>

§

impl<'a> Send for Command<'a>

§

impl<'a> Sync for Command<'a>

§

impl<'a> Unpin for Command<'a>

§

impl<'a> UnsafeUnpin for Command<'a>

§

impl<'a> UnwindSafe for Command<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more