繁体   English   中英

如果我对OleDbParameterCollection.Clear的可靠性感到担忧,我可以使用哪些方法来验证该方法的有效性?

[英]If I have concern over the reliability of OleDbParameterCollection.Clear, what are my options to validate the method works?

在我的代码中,我使用相同的OleDbCommand进行了多个数据库操作(我正在使用MS Access)。 由于我要重用同一命令对象,因此每次重用之前,都必须每次对其调用Clear() 如果我担心调用Clear()的可靠性,我有什么选择来验证API所描述的方法是否有效?

您的问题似乎是“ OleDbParameterCollection.Clear ”方法是否按照API的指示执行(“从OleDbParameterCollection中删除所有OleDbParameter对象。”)?

选项1:信任API。

通常,您不应怀疑您是否获得了API(如果您不负责维护它们)。 如果您真的很偏执,请选择其他选项(通常不建议这样做)。

选项2:手动测试API。

创建一个示例控制台应用程序项目,以测试该API,以确保其行为符合您的期望。 这将使您准确地看到它的工作方式,尤其是在您的调用代码难以自动化或调试的情况下。

选项3:对API进行单元测试。

创建一个自动程序来测试相关的API,并在每次自动构建后自动运行它。 如果您将API替换为其他版本,则会立即发现差异。

选项4:如果API失败,则会出错。

如果您担心API的工作方式,则可以进行一些健全性检查,并在API无法按预期运行时抛出异常(或运行时所需的任何行为)。 如果您在多个位置调用API,则最好使用扩展方法或装饰器模式之类的方法,以便对API的每次调用都可以进行完整性检查。 这是一个如何使用扩展方法(未试用)进行操作的示例:

public static class OleDbParameterCollectionExtensions
{
    // <summary>
    // Calls Clear() on the OleDbParameterCollection and performs
    // a check to make sure it succeeds.  If it does not succeed
    // an exception will be thrown.
    // </summary>
    public static void SafeClear(this OleDbParameterCollection @this)
    {
        // Call the method.
        @this.Clear();

        // Do the sanity check
        if (@this.Count != 0)
        {
            throw new Exception(@"OleDbParameterCollection.Clear() failed.");
        }
    }
}

// Usage:
OleDbParameterCollection collection = /* ... */;
collection.SafeClear();

选项5:每次需要一个新的OleDbCommand

除非出于性能原因(可以衡量)而需要重复使用它,否则我认为它是一次性的。 它实现IDisposable ,所以使用它里面using会安全地清理你。 以下是用法示例(未经测试):

string connectionString = "...";
using (var connection = new OleDbConnection(connectionString))
{
    connection.Open();

    string query = "...";
    using (var command = new OleDbCommand(query, connection))
    {
        /* Initialize command.Parameters */
        command.ExecuteNonQuery();
    }
}

无论选择哪个选项,您的验证过程(质量检查,自动化测试等)都应该检测到API仍未按预期运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM