簡體   English   中英

VB.NET,兩個SQL命令,構建一個字符串

[英]VB.NET, Two SQL command, build a string

我使用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立即讀取它

問題是這些表是如何相關的,你是否在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

一個主要/外鍵是好的但是如果你只是想愚弄並使字符串連接你可以這樣做更容易...

正如你已經說過的那樣你在兩者上做了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的答案非常好而且非常詳細,但我認為它很適合你想要的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM