C#OleDbCommand连接属性

时间:2015-12-25 20:18:52

标签: c# .net ado.net oledb

我想知道为什么这段代码没有用,因为我已经构建了一个连接数据库并打开连接的方法。我假设这是因为我跳过使用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;
}


}

2 个答案:

答案 0 :(得分:2)

这一行

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语句确保代码中的一次性对象在异常情况下也会被关闭和处理。

答案 1 :(得分:1)

你应该添加这种代码:

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

reference