上一節講述的是刪除操作,本節將講述如何直接執行sql語句。
直接執行sql語句是使用FromSql方法。
DbSession.Default.FromSql("select * from products").ToDataTable();
DbSession.Default.FromSql("select * from products where productid=pid").AddInParameter("pid", DbType.Int32, 1).ToDataTable();
這樣的查詢條件是productid=1返回一條記錄。
這裏sql語句中pid要確保唯一,不然都會被替換成參數的。
比如:select * from products where productid=productid 這樣在sqlserver下就會被替換成select * from products where @productid=@productid
這裏只是做了簡單的替換,所以確保申明的參數唯一性。
當多個參數時可如下寫法:
DbParameter[] parameters = new DbParameter[2];
parameters[0] = DbSession.Default.Db.DbProviderFactory.CreateParameter();
parameters[0].DbType = DbType.Int32;
parameters[0].ParameterName = "pid";
parameters[0].Value = 1;
parameters[1] = DbSession.Default.Db.DbProviderFactory.CreateParameter();
parameters[1].DbType = DbType.Int32;
parameters[1].ParameterName = "cid";
parameters[1].Value = 2;
DbSession.Default.FromSql("select * from products where productid=pid or categoryid=cid")
.AddParameter(parameters)
.ToDataTable();
這樣寫似乎太麻煩了,更簡潔的寫法如下:
DbSession.Default.FromSql("select * from products where productid=pid or categoryid=cid")
.AddInParameter("pid", DbType.Int32, 1)
.AddInParameter("cid", DbType.Int32, 2)
.ToDataTable();
這樣就清爽多了。
返回類型還可以如下:
IDataReader ToDataReader()
返回DataReader
DataSet ToDataSet()
返回DataSet
int ExecuteNonQuery()
返回受影響的條數
object ToScalar()
返回單個值
TResult ToScalar<TResult>()
返回執行類型的值
也可返回實體。
TEntity ToFirst<TEntity>()
返回第一條實體
List<TEntity> ToList<TEntity>()
返回實體列表
sql語句的執行也是簡單明瞭的。
下一節將講述存儲過程的執行。