0

我用 VB.NET (2010) 编写了一个程序,它与本地数据库 (.sdf - SQL Server CE) 一起工作。

现在,我需要执行两个 SELECT命令。这里有一个例子来理解我想要什么:

SQL命令示例一:

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 立即阅读

4

2 回答 2

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 的回答很好而且非常详细,但我认为它对于你想要的东西来说非常重要。

于 2014-01-29T00:09:05.913 回答
1

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

您可以填充一个List<User> whereUser是具有两个属性的自定义类:

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

现在使用 anINNER 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您可以在阅读所有记录时添加 in 的实例:

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
于 2014-01-28T21:02:21.573 回答