如何使用C#在Access数据库中实现“Right Outer Join”查询?

时间:2012-07-23 05:12:47

标签: c# ms-access oledb jet

我想编写 RightOuterJoin 查询以从访问数据库中检索数据。如何在 c#中实现此查询? 我试过像这样

connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=Sample1.accdb; Jet OLEDB:Engine Type=5";

string sql = "SELECT t1.mobileno,t1.RetailerNo,t1.custcode,t2.RET NO FROM [C:\\Sample1.accdb].[Table1] as t1 RIGHT OUTER JOIN [C:\\Sample1.accdb].[Table2] as t2 ON t1.RetailerNo = t2.RET NO";


database = new OleDbConnection(connectionString);
database.Open();
OleDbCommand cmd1 = new OleDbCommand(sql, database);
OleDbDataAdapter da = new OleDbDataAdapter(cmd1);

//database.Open();
//conn.Open();
cmd1.ExecuteNonQuery();
System.Data.DataTable dt = new System.Data.DataTable();
da.Fill(dt);

3 个答案:

答案 0 :(得分:1)

我认为您的连接字符串可能有问题。它使用Jet提供程序,但数据库类型是较新的ACCDB格式。 Jet不适用于ACCDB。

对于ACCDB,您需要ACE提供商。如果未安装Office 2007或2010,则可以下载并安装Access Database Engine Redistributable

以下是工作连接字符串中的提供程序部分:

Provider=Microsoft.ACE.OLEDB.12.0

有关详细信息,请参阅Connection strings for Access 2007

Sample1.accdb建立连接后,将SQL语句修改为:

SELECT t1.mobileno,t1.RetailerNo,t1.custcode,t2.[RET NO]
FROM 
    Table1 as t1
    RIGHT JOIN Table2 as t2
    ON t1.RetailerNo = t2.[RET NO]

注意:

  1. 由于您已连接到Sample1.accdb,因此您无需在表名前加上db文件的路径。
  2. 对于包含空格(RET NO)的字段名称,请将字段名称括在方括号中。

答案 1 :(得分:0)

答案 2 :(得分:0)

尝试以下代码

select * from tblemp right join tblDept on tblemp.DeptId=tblDept.pkDeptId

它与在SQL SERVER中使用右连接相同。