我正在寫一個表單應用程式。用戶在文本框中輸入他的姓名、電子郵件、地址等,就像他在訂購包裹一樣。如果用戶已經下訂單,我想讓用戶可以在文本框中輸入他的電子郵件,并根據他的電子郵件填寫包裹所需的所有其他個人資訊。
我遇到的麻煩是他的資料在兩個不同的表中。客戶表中的資料(他的名字和姓氏)我已經成功檢索到,但我不知道如何獲取表地址中的資料。
這是代碼:
{
try
{
var connection = getConnection();
var command = new SqlCommand
{
Connection = connection,
CommandText = "SELECT * FROM Customer WHERE Email = @Email"
};
command.Parameters.Clear();
command.Parameters.AddWithValue("@Email", mailBox.Text);
connection.Open();
reader = command.ExecuteReader(CommandBehavior.SingleRow);
if (reader.Read())
{
fnameBox.Text = reader["fname"].ToString();
lnameBox.Text = reader["lname"].ToString();
command.CommandText = "SELECT * FROM address WHERE customerID= " reader["customerID"].ToString();
stateBox.Text = reader["state"].ToString(); //part where the error happens
cityBox.Text = reader["city"].ToString();
addressBox.Text = reader["address"].ToString();
zipBox.Text = reader["zip"].ToString();
int result = command.ExecuteNonQuery();
connection.Close();
if (result > 0)
{
MessageBox.Show("Success");
}
else
{
MessageBox.Show("Error");
}
}
else
{
MessageBox.Show("E-mail entered doesn't exist");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} ```
uj5u.com熱心網友回復:
- 將來考慮使用像 EF 這樣的東西,會清理這些東西,但請注意,這對于您在這里所做的事情可能不可行。
- 您應該通過 SQL Joins 從多個表中獲取相關資料(查看 LEFT JOIN 和 INNER JOIN)
- 您的問題是由沒有
state欄位的結果集引起的,而這又是由您實際上沒有執行SELECT * FROM address查詢引起的- 您正在設定命令文本但沒有進一步執行。您需要DataReader為第二個查詢創建另一個查詢并讀取這些結果。
總的來說,有很多東西需要改進,但你顯然處于學習這一點的早期狀態,所以現在很好......
uj5u.com熱心網友回復:
你沒有讀完第一個結果,然后試圖獲得第二個結果
command.Parameters.Clear();
command.Parameters.AddWithValue("@Email", mailBox.Text);
var customerID=0;
var success=false;
connection.Open();
var reader1 = command.ExecuteReader();
if (reader1.Read())
{
sucess=true;
fnameBox.Text = reader1["fname"].ToString();
lnameBox.Text = reader1["lname"].ToString();
customerID= Convert.ToInt32( reader1["customerID"].ToString());
reader1.Close();
}
if( sucess)
{
command.CommandText = "SELECT * FROM address WHERE customerID = @CustomerID";
command.Parameters.Clear();
command.Parameters.AddWithValue("@CustomerID", customerID);
var reader2 = command.ExecuteReader();
sucess=false;
if (reader2.Read())
{
sucess=true;
stateBox.Text = reader2["state"].ToString();
cityBox.Text = reader2["city"].ToString();
addressBox.Text = reader2["address"].ToString();
zipBox.Text = reader2["zip"].ToString();
reader2.Close();
}
if (success)
{
MessageBox.Show("Success");
}
else
{
MessageBox.Show(" address select Error");
}
}
else
{
MessageBox.Show("E-mail entered doesn't exist");
}
connection.Close();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/388624.html
標籤:C# sql sql-server 数据库 形式
