Parameters
Use
parameters to pass the data to the queries. Parameters are sort of variables in
a query. However, you can’t get the data from the query using parameters.
Usage
of parameters is trivial; you can create a parameter and simply associate the
name of the parameter with the number, string, an array or an object.
Parameters param = db.CreateParameters();
param["name"] = "John"
In this
database, there are some overloaded functions that take parameters as a argument:
var res = db.ExecuteQuery("SELECT BasicUser WHERE Name = @name", param);
or
var res = db.ExecuteScalar("SELECT BasicUser WHERE Name = @name", param);
Parameters
could be of an arbitrary value of a string type or any simple types, e.g. int, long
Parameters param = db.CreateParameters();
param["name"]
= "John"
var res = db.ExecuteQuery("SELECT BasicUser WHERE Name = @name", param);
or
Parameters param = db.CreateParameters();
param["name"] = ((BasicUser)db.ExecuteScalar("SELECT BasicUser")).Name;
var res = db.ExecuteQuery("SELECT BasicUser WHERE Name = @name", param);
All
object parameters (except for the DateTime) should come from
the database.
One of
the reasons for this is that there is no standard way to compare arbitrary
objects.
Parameters param = db.CreateParameters();
param["school"] = db.ExecuteScalar("SELECT UserSchool WHERE Name CONTAINS 'Thornleigh'");
var res = db.ExecuteQuery("SELECT BasicUser WHERE UserSchool = @school", param);
With DateTime,
you can supply any object:
Parameters param = db.CreateParameters();
param["dt1"]
= new DateTime(2009, 05, 02);
param["dt2"]
= new DateTime(2009, 05, 04);
var res = db.ExecuteQuery("SELECT BasicUser WHERE BirthDate BETWEEN @dt1 AND @dt2");
Array
parameters allow you to use one- or multi dimensional
array of simple types and strings.
Please
note that for the arbitrary arrays, you should use AddList (or SetList), This allows us to pass list of valuess instead of an object.
Parameters param = db.CreateParameters();
param.AddList("emails", new string[]{"john@gmail.com", "david@hotmail.com"});
var res = db.ExecuteQuery("SELECT BasicUser WHERE Emails CONTAINS @emails", param);
Assigning
the parameter value is
treated as object parameter, not a list parameter.
If you want to find
object that references a given list, use
“=” operator.
Parameters param = db.CreateParameters();
param["emails"] = ((BasicUser)db.ExecuteScalar("SELECT BasicUser")).Emails;
var res = db.ExecuteQuery("SELECT BasicUser WHERE Emails contains @emails", param);
In queries, array parameters could be used as an ordinary array, for example:
Parameters param = db.CreateParameters();
param.AddList("emails", new string[]{"john@gmail.com", "david@hotmail.com"});
var res = db.ExecuteQuery("SELECT BasicUser WHERE ALL @emails in Emails", param);
Also,
you can use parameters in TOP or in ORDER BY
Parameters param = db.CreateParameters();
param["top"] = 5;
var res = db.ExecuteQuery("SELECT TOP @top BasicUser
WHERE Name =
'John'")
Parameters param = db.CreateParameters();
param.AddList("interest", new string[]{"reading", "running"});
var res = db.ExecuteQuery("SELECT BasicUser WHERE Name = 'John' ORDER BY Interests in @interest")
Parameters
can carry a null value:
Parameters param = db.CreateParameters();
param["null"] = null;
param["name"] = "John"
var res = db.ExecuteQuery("SELECT BasicUser WHERE Name = @name AND Friends != @null");