【问题标题】:C# OleDbCommand Connection PropertiesC# OleDbCommand 连接属性
【发布时间】:2015-12-25 20:18:52
【问题描述】:

我想知道为什么这段代码不起作用,因为我已经构建了一个连接到数据库并打开连接的方法。我认为这是因为我跳过了 OleDbCommand Connection 属性的使用。是否必须使用此属性?

我尝试将Connection() 方法直接分配给OleDbCommand cmd = new OleDbCommand("SELECT City FROM Employees", Connection().Open()); 对象也没有成功。

using System;
using System.Data;
using System.Data.OleDb;

class KDRM
{
static void Main()
{

    OleDbCommand cmd = new OleDbCommand("SELECT City FROM Employees");
    Connection().Open();
    OleDbDataReader rdr = cmd.ExecuteReader();


    while (rdr.Read())
    {

        Console.WriteLine(rdr.GetString(0));
    }

    Console.ReadLine();
}

public static OleDbConnection Connection()
{       
    OleDbConnection conn = new OleDbConnection();
    conn.ConnectionString = "Connection...";

    return conn;
}


}

【问题讨论】:

    标签: c# .net ado.net oledb


    【解决方案1】:

    这一行

    OleDbCommand cmd = new OleDbCommand("SELECT City FROM Employees", Connection().Open()); 
    

    无法工作,因为您试图将 Open 的结果作为 OleDbCommand 构造函数的第二个参数传递,但这是一个 void 方法,因此您的代码甚至无法编译。

    每当您尝试执行命令时,都需要将命令连接属性设置为有效连接,并且该连接应在您执行命令时打开。

    在创建连接时可以使用既定的良好做法,您应该遵循这些做法是有充分理由的

    static void Main()
    {
    
        using(OleDbConnection cn = Connection())
        using(OleDbCommand cmd = new OleDbCommand("SELECT City FROM Employees", cn);
        {
             cn.Open();
             using(OleDbDataReader rdr = cmd.ExecuteReader())
             {
                 while (rdr.Read())
                 {
                    ....
                 }
             }
        }
        Console.ReadLine();
    
    }
    

    using 语句确保代码中的一次性对象在异常情况下也被关闭和处置。

    【讨论】:

    • 感谢@Steve 的Using 声明。
    • 这是一个真正的救命稻草,我在任何可能的地方都使用它,因为内存泄漏是最细微的错误发现
    • 好建议史蒂夫,我来自 PHP 背景并尝试学习 C#/.NET,它不像 PHP 那样容易,但它很有趣 :D
    【解决方案2】:

    你应该添加这样的代码:

    // Set the Connection to the new OleDbConnection.
    command.Connection = connection;
    

    reference

    【讨论】:

    • 我尝试将 command.Connection 与我的自定义 Connection() 方法相关联没有奏效。
    • 这样您就可以将 Connection() 分配给某个变量,然后将其传递给命令的连接(如@Steve 所示)
    • 我什至不确定你的代码中是否真的需要 Connection() 方法
    • 谢谢鲍里斯!我修改了我的代码,就像你的建议和繁荣一样,它显示了来自数据库的数据;D。
    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多