使用C#比较两个本地数据库表

时间:2011-11-01 19:21:32

标签: c# .net sql database compare

我是C#的新手。

我在VS2010(.sdf文件)中创建了一个本地数据库。我试图在数据库列之间创建一些比较。我使用下面的连接字符串成功连接数据库:

 string connectionString = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;data source=c:\\users\\user\\documents\\visual studio 2010\\Projects\\myapp\\myapp\\mydb.sdf";

我的数据库有两个表。昵称和名字。 Nicknames有一个名为“Alias”的字段,它只列出存储的昵称。 名称有一个名为“Text”的字段,它只列出存储的名称。

例如:

别名

Masher
Jones
Jaime
John
Joker

姓名

John
Adam
Matt
Jones

假设这些是我数据库中的值。我想要的是找到不在名称表中的昵称 - >>在我的例子中,Masher,Jaime和Joker。

我该怎么做?我正在使用C#和VS2010。

以下是我在SQL代码方面的尝试:

 "SELECT Alias FROM nicknames WHERE (NOT (Alias IN(SELECT Text FROM Names))) ";
         "SELECT Alias FROM nicknames EXCEPT SELECT Text FROM Names";
         "SELECT Alias FROM nicknames t LEFT JOIN Names m ON m.Text = t.Alias WHERE m.Text IS NULL";
         "SELECT Alias FROM nicknames UNION SELECT Text FROM Names";

我该怎么办?

修改

 OleDbConnection conn = new OleDbConnection(connectionString);
        conn.Open();
 string sql = "MYQUERYFROMTHEABOVEEXAMPLE";
 OleDbCommand cmd = new OleDbCommand(sql, conn);
             OleDbDataReader reader;
             reader = cmd.ExecuteReader();
             string result = "";
             while (reader.Read())
            {
            result += reader.GetString(0) + "\n";
  }  

这是我用来阅读结果的内容。

2 个答案:

答案 0 :(得分:4)

尝试:

SELECT Alias FROM nicknames WHERE Alias not in (SELECT Text FROM Names)

编辑:改为尝试:

select a.Alias
from nicknames a left outer join Names n on a.alias = n.text 
where n.text IS NULL

我的尝试@你的代码(忽略我使用SQL语法的事实,就像我使用的那样):

enter image description here

答案 1 :(得分:1)

Select [Alias] from [nicknames] where [Alias] not in (select [text] from [names])

应该完全按照自己的意愿行事。