VB.NET,两个SQL命令,构建一个字符串

时间:2014-01-28 20:41:52

标签: sql vb.net sql-server-ce datareader executereader

使用VB.NET(2010)编写程序,使用本地数据库(.sdf - SQL Server CE)。

现在,我需要执行两个SELECT 命令。 这是一个了解我想要的例子:

SQL命令示例1:

SELECT A FROM tbl_Name

如果我用SqlCeDataReader读取这个结果,我会得到以下信息:

  

詹姆斯

     

汤姆

     

麦克

SQL命令示例2:

SELECT B FROM tbl_Age

如果我用SqlCeDataReader读取这个结果,我会得到以下信息:

  

14

     

15

     

16


问题是,如何构建一个最终包含这样的值的字符串 - >

  

詹姆斯; 14

     

汤姆; 15

     

麦克; 16

我该怎么做?我知道我必须使用StringBuilder然后使用AppendLine(),但问题/问题更多:如何将NAME和AGE集中在一行? 我怎么能优雅地解决这个问题? 我希望你能帮助我。谢谢! BK _

更新

不,他们没有任何关系。我正在使用Sql Server CE。

如果有一个表更新可能,那将是非常好的。这意味着,如果我可以将这两个表更新为一个表,如:

Tbl_personality 列名和列年龄

而不是使用SQL * FROM tbl_personality

立即阅读

2 个答案:

答案 0 :(得分:1)

问题是这些表格是如何相关的,你在table_age中有一个导致tbl_name的外键吗?然后,您可以使用JOIN和单个查询。

您可以填写List<User>其中User是包含这两个属性的自定义类:

public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
}

现在使用INNER JOIN链接FK上的两个表,并为每个名称获得正确的年龄:

string sql = @"SELECT n.Name,a.Age 
               FROM tbl_Name n 
               INNER JOIN tbl_Age a 
                  ON n.NameID=a.NameID
               ORDER BY Name, Age";

您可以在阅读所有记录时添加User的实例:

List<User> users = new List<User>();
using (var con = new System.Data.SqlClient.SqlCeConnection("Connection-String"))
using (var cmd = new SqlCeCommand(sql, con))
{
    con.Open();
    using (var rd = cmd.ExecuteReader())
    {
        while (rd.Read())
        {
            string name = rd.GetString(0);
            int age = rd.GetInt32(1);
            users.Add(new User { Name = name, Age = age });
        }
    }
}

如果你想输出全部:

foreach (User u in users)
    Console.WriteLine("{0};{1}", u.Name, u.Age);

编辑:这里是VB.NET版本:

Dim users As New List(Of User)()
Using con = New System.Data.SqlClient.SqlCeConnection("Connection-String")
    Using cmd = New SqlCeCommand(sql, con)
        con.Open()
        Using rd = cmd.ExecuteReader()
            While rd.Read()
                Dim name As String = rd.GetString(0)
                Dim age As Integer = rd.GetInt32(1)
                users.Add(New User() With { _
                    Key .Name = name, _
                    Key .Age = age _
                })
            End While
        End Using
    End Using
End Using

答案 1 :(得分:1)

主键/外键会很好但是如果你只是想愚弄并使字符串连接你可以这样做更容易...

正如你已经说过的那样,你们两个都有SQLCEReader,所以你们都有数据。

要合并它们,只需使用一个读取器行和另一个读取器行,如

sqlDataReader1("Name") & ";" & sqlDataReader2("Age")

输出将是

James;14

你想要的

如果你将它们放在不同的子中你可以将它们组合成1或者只是使用一些变量然后组合变量

dim namestr as string = string.empty
dim agestr as string = string.empty

然后你把它交给你的字符串变量

namestr = sqlDataReader1("Name")
agestr = sqlDataReader2("Age")

然后合并

namestr & ";" & agestr

输出也是

James;14

Tim Schmelter的答案非常好而且非常详细,但我认为它很适合你想要的东西。