- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我似乎有两个选择:
IDisposable
.创建我的DbCommand
实例为 private readonly
字段,并在构造函数中添加它们使用的参数。每当我想写入数据库时,绑定(bind)到这些参数(重用相同的命令实例),设置 Connection
和 Transaction
属性,然后调用 ExecuteNonQuery
.在 Dispose
方法,调用Dispose
在这些领域中的每一个。 using(var cmd = new DbCommand("...", connection, transaction))
围绕命令的使用,每次调用ExecuteNonQuery
之前添加参数并绑定(bind)到它们.我假设我不需要每个查询的新命令,每次打开数据库时都需要一个新命令(对吗?)。 IDisposable
只是因为我用过几个
DbCommand
s(这应该是他们不关心的实现细节)。我也有点怀疑保留
DbCommand
周围的实例可能会无意中锁定数据库或什么?
using System;
using System.Net;
using System.Data.SQLite;
public class Class1 : IDisposable
{
private readonly SQLiteCommand updateCookie = new SQLiteCommand("UPDATE moz_cookies SET value = @value, expiry = @expiry, isSecure = @isSecure, isHttpOnly = @isHttpOnly WHERE name = @name AND host = @host AND path = @path");
public Class1()
{
this.updateCookie.Parameters.AddRange(new[]
{
new SQLiteParameter("@name"),
new SQLiteParameter("@value"),
new SQLiteParameter("@host"),
new SQLiteParameter("@path"),
new SQLiteParameter("@expiry"),
new SQLiteParameter("@isSecure"),
new SQLiteParameter("@isHttpOnly")
});
}
private static void BindDbCommandToMozillaCookie(DbCommand command, Cookie cookie)
{
long expiresSeconds = (long)cookie.Expires.TotalSeconds;
command.Parameters["@name"].Value = cookie.Name;
command.Parameters["@value"].Value = cookie.Value;
command.Parameters["@host"].Value = cookie.Domain;
command.Parameters["@path"].Value = cookie.Path;
command.Parameters["@expiry"].Value = expiresSeconds;
command.Parameters["@isSecure"].Value = cookie.Secure;
command.Parameters["@isHttpOnly"].Value = cookie.HttpOnly;
}
public void WriteCurrentCookiesToMozillaBasedBrowserSqlite(string databaseFilename)
{
using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + databaseFilename))
{
connection.Open();
using (SQLiteTransaction transaction = connection.BeginTransaction())
{
this.updateCookie.Connection = connection;
this.updateCookie.Transaction = transaction;
foreach (Cookie cookie in SomeOtherClass.GetCookieArray())
{
Class1.BindDbCommandToMozillaCookie(this.updateCookie, cookie);
this.updateCookie.ExecuteNonQuery();
}
transaction.Commit();
}
}
}
#region IDisposable implementation
protected virtual void Dispose(bool disposing)
{
if (!this.disposed && disposing)
{
this.updateCookie.Dispose();
}
this.disposed = true;
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
~Class1()
{
this.Dispose(false);
}
private bool disposed;
#endregion
}
最佳答案
多米尼克,
处理 SQLiteCommand 只是简单地向其事件阅读器发出信号以处理其阅读器并将参数和连接引用设置为 null。
只要您正确处置已执行的阅读器并关闭/处置连接,就不会因缓存命令而面临资源泄漏的风险。
因此,重用缓存的命令并简单地为参数分配值是迄今为止最有效的实现。
.Prepare() 是 noop
在 SQLiteCommand 中,所以那里没有任何好处。
关于.net - 我应该在哪里创建我的 DbCommand 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1252039/
如何将 DbCommand 参数复制到另一个 DbCommand,我想要一个新的 DbCommand,其参数与我上一个 DbCommand 相同。但是现在使用不同的 sql 字符串。 最佳答案 //
我有一个文件集合,对于每个文件,我将在事务中使用 Dbcommand 调用一个 SP。 例如: DbCommand insert = db.GetStoredProcCommand("Insert
您好,我正在尝试为应该在 Visual Studio 2013 中使用的 DbCommand 对象创建自定义可视化工具。 我有以下代码 using VisualizerTest; using Micr
我们使用 Enterprise Library 3.0 访问 Oracle DB(Microsoft Oracle 客户端)。如果在调用存储过程或函数后不释放 DbCommand 实例,会发生什么情况
我正在开发一个使用 ASP.NET Core 2.1 和 EF Core 2.1 的项目。虽然大部分查询和命令使用EF,但有些单元需要直接调用存储过程。 我不能使用FromSql,因为它需要基于实体模
我似乎有两个选择: 让我的类(class)实现IDisposable .创建我的DbCommand实例为 private readonly字段,并在构造函数中添加它们使用的参数。每当我想写入数据库时
我想创建一个新的 DbCommand,但出现了一些错误: DbCommand insertcommand = new DbCommand("insert into persons(firstname,
我想创建一个新的 DbCommand,但出现了一些错误: DbCommand insertcommand = new DbCommand("insert into persons(firstname,
我在一些生成代码分析警告的遗留代码中看到了这一点: Database db = DatabaseFactory.CreateDatabase(strDBCon); DbCommand dbCo
在我试图理解的软件中,DataReader 类是通过 ExecuteReader() 从 IDbCommand 类型(继承的)接收的。 我对 C# 和数据库通信还很陌生,所以:DataReader 如
我有一个参数添加函数,如下所示: public static void AddParameter(DbCommand comm, string ParamName, Object objValue,
我正在尝试拦截所有 SQL 命令并将其记录到数据库中。我还需要参数及其值。但是 command.Parameters 没有 IEnumerable。我可以使用 for-statement,但感觉有点像
我有以下代码尝试从两个不同的表中获取记录,然后将它们添加到特定的组合框中。只有第一个查询有效,第二个查询被忽略。 Try sqlConn = New MySqlConnecti
我不明白为什么每次需要调用存储过程时都必须创建一个 DbCommand 对象。所以我试图想出一种方法来做到这一点。我已经测试了我的代码(见下文)。但我想与社区核实一下,以防我遗漏了什么。我会在 ASP
我需要一个带参数的更新命令,由于某些原因我不能使用存储过程,实际上我们生成更新命令依赖于数据库、表和列,我们使用以下形式: string conStr = "Provider=SQLN
我正在构建一个 sqlwrapper 来处理 MSsql 和 Sqlite,到目前为止,我使用通用 dbconnection、数据集和 dataadapter 没有问题,但是使用 dbcommand
如果我已经使用 ,我有以下 ado.net 代码使用 要包装我的 DBCommand,我是否必须明确关闭下面的连接? 谢谢, public static void ExecuteSQL(
我正在使用 DbCommand 来自:System.ComponentModel.Component 我正在构建一个带有参数的对象: DbCommand command = _webERPDB.Get
您好,我在使用 Devart 时遇到过这种异常情况。我在 MySql 中调用存储过程。存储过程函数,如果我通过数据库调用它。 using (dc = conn.GetContext())
我们有一个超过 13 年历史的 SQL 帮助程序库,所有应用程序都在使用它。我想更新它以使用 Enterprise Library DAAB。这样做的一个障碍是难以将 SqlCommand(由库和所有
我是一名优秀的程序员,十分优秀!