文件名称:绑定到了占位符-率失真优化论文:rate-distortion optimization for video compression
文件大小:5.81MB
文件格式:PDF
更新时间:2024-06-29 21:14:53
ef 6 Recipes,中文
位符和具体的值绑定在一起。第一个插入,我将值 99.97 绑定到了占位符 Amount 上,将值"Ace Plumbing"绑定到占位符 Vendor 上。随后,我们创建 了另一个记录。这里需要注意,这两个参数对象是如何分配到一个 DbParameter 类型的数组上的。为了执行 SQL 语句,我们传递包含 SQL 语 句的字符串和 DbParameter 类型的参数数组给方法 ExecuteSqlCommand(),方法 ExecueSqlCommand 返回 SQL 语句所影 响的行数。在我们的示例中,我们每次调用 ExecuteSqlCommand()方法插 入一行数据。 如果你的 SQL 语句没有任何参数,ExecuteSqlCommand 方法有另一个 重载方法,它只包含一个接收字符串形式的 SQL 语句参数。 代码清单 3-4 中的模式跟我们在 ADO.NET 框架中使用 SqlClient 对 象查询数据的方式有点相同。不同的是,我们不需要构造一个连接字符串和显 式打开一个数据库连接。实体框架上下文对象会自动完成这项工作。需要注意 的是,这里有两个版本的上下文对象:实体框架 5、6 和 4.x 中用于 Code- First 的 DbContext 上下文对象,和早期版本中的 ObjectContext 上下 文对象。 需要记住的是,DbContext 只是一个简单的包装器或者 “Façade,” (译注:这是法语,”外观模式“)它包装了 ObjectContext 上下文对象,使上 下文对象更直接和更易于使用。ObjectContext 的所有功能仍然有效。 表示 SQL 命令和参数的方式也有不同。在 ADO.NET 中的 ExecuteNonQuery()方法中,命令文本和参数被设置到 Command 对象上, 但在实体框架中传递给 ExecuteSqlCommand()方法的是简单类型的参数。 细心的读者可能已经注意到(这是重点),我们没有查询模型。事实上, 正如我们前面提到的那样,我们不需要如图 3-3 所示的 Payment 实体。方法 ExceuteSqlCommand()只使用 DbContext 上下文对象,以及连接字符串。 最佳实践 使用参数化 SQL 语句和不使用参数化 SQL 语句是一个问题。你应该 使用参数化的 SQL 语句,还是动态创建字符串形式的 SQL 语句呢?最佳实践 是,尽可能地使用参数化的 SQL 语句。原因如下: 1、参数化 SQL 语句能帮助阻止 SQL 注入攻击。如果你使用用户界面上 文本框控件中的输入字符,通过动态方式拼接 SQL 语句。那么你可能无意中就 把自己暴露给了 SQL 注入语句,它会严重地损害你的数据库和泄露敏感信息。 当你使用参数化的 SQL 语句时,它会帮你阻止这种情况的发生。 2、如果我们在示例中所示,参数化 SQL 语句,允许重用 SQL 语句。重 用能让我们的代码更加简洁且易于阅读。