2012-07-23 25 views
1

我想写RightOuterJoin查询检索访问数据库中的数据..我如何实现这个查询c#? 我试图像这样如何使用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); 
+0

你在使用LINQ吗? – 2012-07-23 05:15:28

+0

No.Link正在使用数据表na? – 2012-07-23 05:22:52

+0

这意味着你正在使用内嵌查询...我是对吗? – 2012-07-23 05:23:56

回答

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),请将字段名称括在方括号中。
+0

nw我只使用这个语句,但我得到这个错误**在查询表达式中的语法错误(缺少运算符)** – 2012-07-23 06:06:20

+0

no ..我正在得到结果.. – 2012-07-23 06:20:46

0

试试下面的代码

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

它是一样的你在SQL SERVER中使用正确的连接。