2013-05-09 38 views
0

我在我的數據庫有此表(記錄ID是1名學生一樣,它增加1自動爲不同的學生):使用C#我想保存從數據庫中多條記錄在一個字符串

id | firstName | lastName | subject | grade | recordID | 
----+-----------+----------+---------+-------+----------+ 
1 | John  | Doe  | 1  | A  | 1  | 
1 | John  | Doe  | 2  | B  | 1  | 
3 | Max  | Smith | 1  | C  | 2  | 

爲ID = 1的數據保存到一個字符串格式爲:

Name: John Doe 
Details: 1A; 2B 
Name: Max Smith 
Details: 1C 

我做了什麼至今:

SqlCommand cmd = _connection.CreateCommand(); 
string res = null; 
cmd.CommandText = "SELECT COUNT(DISTINCT recordID) FROM table1"; 
int numb = Convert.ToInt32(cmd.ExecuteScalar().ToString()); 
int currentRecord = 1; 

for (int i = 0; i < numb; i++) 
{ 
cmd.CommandText = "SELECT firstname, lastname FROM table1 WHERE recordID="+currentRecord+";"; 
res += "Name: " + cmd.ExecuteScalar().ToString() + "\n Details: "; 

cmd.CommandText = "SELECT subject, grade FROM table1 WHERE recordID="+currentRecord+";"; 
res += "Details: " + cmd.ExecuteScalar().ToString() + "\n"; 

currentRecord++ 
} 

這總是將第一條記錄保存在字符串中,像這樣

Name: John 
Details: 1 
Name: Max 
Details: 1 

儘管我需要保存多行和多列。請幫忙!

+0

兩個往返於數據庫中讀取相同的記錄?效率不高 – Steve 2013-05-09 14:48:23

回答

2

更改命令文本就像這個...

cmd.CommandText = "SELECT firstname+' '+lastname FROM table1 WHERE recordID="+currentRecord; 



cmd.CommandText = "SELECT subject+grade FROM table1 WHERE recordID="+currentRecord; 
1

我會嘗試檢索recordID所命令的對數據庫的單個調用中的所有記錄(假設它們不是數千),然後輸入一個循環並在一次提取一條記錄的信息。

這可以通過這樣的循環來完成(未測試,只是舉個例子)

string sqlCommand = "SELECT id ,firstName, lastName,subject,grade,recordID " + 
        "from table ORDER BY recordID"; 

int prevID = -1; 
int curID = -1; 
StringBUilder res = new StringBuilder() 
SqlCommand cmd = _connection.CreateCommand(); 
cmd.CommandText = sqlCommand; 
SqlDataReader reader = cmd.ExecuteReader() 
while(reader.Read() 
{ 
    curID = Convert.ToInt32(reader[5]); 
    if(curID != prevID) 
    { 
     prevID = curID; 
     res.AppendLine("\r\nName: " + reader[1].ToString() + " " + reader[2].ToString()); 
     res.Append("Details:"); 
    } 
    res.Append(reader[3].ToString() + reader[4].ToString() + ";"; 
} 
Console.WriteLine(res.ToString()); 
+0

應該是公認的答案。 – DavidB 2013-05-10 07:05:59

相關問題