亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C# - 執行查詢時登錄無效

C# - 執行查詢時登錄無效

C#
qq_笑_17 2023-08-20 15:28:28
我是 C# 新手,正在學習查詢打開和關閉,現在我執行正確的查詢,但沒有獲得正確的輸出。請告訴我如何解決這個問題,謝謝。這是我的查詢代碼。SqlCommand cmd = new SqlCommand("Select * from users Where username = @username and password = @password", sqlcon);cmd.CommandType = CommandType.Text;cmd.Parameters.AddWithValue("@username", txtUsername.Text);cmd.Parameters.AddWithValue("@password", txtPassword.Text);SqlDataReader dr = cmd.ExecuteReader();sqlcon.Open();cmd.ExecuteNonQuery();sqlcon.Close();if (dr.HasRows){    Main objMain = new Main();    this.Hide();    objMain.Show();}else{    MessageBox.Show("Check your username and password");}我收到這個錯誤System.InvalidOperationException:'ExecuteReader 需要一個打開且可用的連接。連接的當前狀態已關閉。
查看完整描述

1 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

你需要在 -.ExecuteReader() 之后 sqlcon.Open()調用- 為什么你還要執行.ExecuteNonQuery()?您已經通過調用執行查詢.ExecuteReader()- 這是無用的,應該刪除(ExecuteNonQuery適用于運行INSERT, UPDATEor DELETE- 的 SQL 語句,但不適用于您在這里有類似情況的情況SELECT...)。


SqlCommand cmd = new SqlCommand("SELECT * FROM users WHERE username = @username AND password = @password", sqlcon);


cmd.Parameters.Add("@username", SqlDbType.VarChar, 100).Value = txtUsername.Text);

cmd.Parameters.Add("@password", SqlDbType.VarChar, 100).Value = txtPassword.Text;


// open connection? ??

sqlcon.Open();


// execute reader and iterate over rows

SqlDataReader dr = cmd.ExecuteReader();


if (dr.HasRows)

{

? ? Main objMain = new Main();

? ? this.Hide();

? ? objMain.Show();

}

else

{

? ? MessageBox.Show("Check your username and password");

}? ?


// close connection only **AFTER** you've read the data!

sqlcon.Close();


由于您只想檢查給定用戶是否存在用戶名和密碼,因此返回表的所有列確實是一種矯枉過正 - 僅返回例如(或其他一些列)Users就足夠了UserId,小欄) - 然后使用.ExecuteScalar()。如果具有該用戶名和密碼的用戶存在,則UserId返回ExecuteScalar()該用戶名和密碼 - 如果該用戶不存在,則返回 NULL。

像這樣的東西:

SqlCommand cmd = new SqlCommand("SELECT UserId FROM users WHERE username = @username AND password = @password", sqlcon);


cmd.Parameters.Add("@username", SqlDbType.VarChar, 100).Value = txtUsername.Text);

cmd.Parameters.Add("@password", SqlDbType.VarChar, 100).Value = txtPassword.Text;


// open connection? ??

sqlcon.Open();


// execute scalar?

object result = cmd.ExecuteScalar();


// if we got a result --> user with that username nad password exists

if (result != null)

{

? ? Main objMain = new Main();

? ? this.Hide();

? ? objMain.Show();

}

else

{

? ? MessageBox.Show("Check your username and password");

}? ?


sqlcon.Close();


查看完整回答
反對 回復 2023-08-20
  • 1 回答
  • 0 關注
  • 142 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號