上一节讲述的是删除操作,本节将讲述如何直接执行sql语句。
直接执行sql语句是使用FromSql方法。
DbSession.Default.FromSql("select * from products").ToDataTable();
这样看起来亲切多了吧,直接sql就可以执行。
当然也可添加参数的啊。
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语句的执行也是简单明了的。
下一节将讲述存储过程的执行。