我想做一個小的聯繫簿,從一個mssql數據庫中獲取聯繫人的詳細信息。它有3個表格:contacts,last_talk(上次我與聯繫人聊天+討論)和另一個表(這兩個表都具有來自前兩個表的主鍵)C#顯示從SQL數據庫中的字符串
在顯示聯繫人的窗體(tabcontrol標籤)中,我添加了2個列表框,加載並顯示聯繫人姓名,第二個列表框爲我選擇的每個聯繫人加載「Last talk」列表,具體取決於我與聯繫人進行了多少次「會談」。
現在我試圖在我的「對話列表」列表框中選擇一個字段時,我正試圖在label.Text中顯示並從數據庫中顯示richTextBox.Text。
我的數據庫有3個表格:1個用於聯繫人,1個用於討論/會談,1個用於創建前2個表格之間的關係。
下面是代碼的一部分:
private void PopulateSelectedTalk()
{
string query = "SELECT * FROM LastTalk WHERE Id = @ID";
using (connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = lstConversationList.SelectedValue;
connection.Open();
SqlDataReader rdr = command.ExecuteReader();
while (rdr.Read())
{
lblLastTalk.Text = rdr["LastTalkSubject"].ToString();
rtxtLastTalkDescription.Text = rdr["LastTalkDescription"].ToString();
}
rdr.Close();
connection.Close();
}
}
private void lstConversationList_SelectedIndexChanged(object sender, EventArgs e)
{
PopulateSelectedTalk();
}
我有一個非常類似的問題,我這裏張貼:C# Displaying a sql database object's name in a label.Text property on "SelectedIndexChanged" Event
而且我加入
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = lstConversationList.SelectedValue;
後,它的工作。
但是,現在當我試圖使用lstConversationList.SelectedValue;我得到下面的異常
「」類型的異常出現在System.Data.dll中,但在用戶代碼中沒有處理 其他信息:無法參數值從DataRowView的到的Int32轉換。
此行引發異常:SqlDataReader rdr = command.ExecuteReader();
當我在上一個問題的調試模式中將鼠標懸停在「Listbox.SelectedValue」上時,我將鼠標懸停在「Listbox.SelectedValue」上的代碼中,我得到的值爲「1」得到「System.DataRowView」
下面是從以前的問題的代碼(它的工作原理):
private void PopulateContactLabels()
{
string query = "SELECT * FROM Contact WHERE Id = @ID";
using (connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = lstContactList.SelectedValue;
connection.Open();
SqlDataReader rdr = command.ExecuteReader();
while (rdr.Read())
{
lblContactName.Text = rdr["Name"].ToString();
lblCompany.Text = rdr["Company"].ToString();
lblOccupation.Text = rdr["Occupation"].ToString();
lblPhoneNumber.Text = rdr["PhoneNumber"].ToString();
lblEmail.Text = rdr["Email"].ToString();
}
rdr.Close();
connection.Close();
}
}
我缺少/做錯了嗎? 請幫忙!
編輯:代碼,設置在lstConversationlist項目
private void PopulateTalkList()
{
string query = "SELECT a.LastTalkSubject FROM LastTalk a " + "INNER JOIN ContactLastTalk b ON a.Id = b.LastTalkId " +
"WHERE b.ContactId = @ContactId";
using (connection = new SqlConnection(connectionString))
using(SqlCommand command = new SqlCommand(query,connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
command.Parameters.AddWithValue("@ContactId", lstContactList.SelectedValue);
DataTable lastTalkTable = new DataTable();
adapter.Fill(lastTalkTable);
lstConversationList.DisplayMember = "LastTalkSubject";
lstConversationList.ValueMember = "Id";
lstConversationList.DataSource = lastTalkTable;
}
}
你能證明將在_lstConversationList_項目的代碼? – Steve
我已添加代碼。 – Cristian