[英]Retrieve data from sql server compact 4.0 to textbox
我的Winform中有兩個文本框。 我想在第一個文本框中輸入一個userId,然后單擊一個按鈕在第二個文本框中正確顯示一個用戶名。 數據存儲在sql server compact中。 表名是Users
,該表包含兩列UserID
和UserName
。
使用此代碼,我可以打開一個連接並從UserName列中檢索第一個值,
SqlCeConnection cn = new SqlCeConnection(@"Data Source = D:\Database\Training.sdf");
try
{
cn.Open();
SqlCeCommand cmd = new SqlCeCommand("SELECT UserID, UserName from Users;", cn);
TrainerNameBox.Text = cmd.ExecuteScalar().ToString();
cn.Close();
}
catch
{
}
ExecuteScalar
返回第一行的第一列 。 其他列或行將被忽略。
在您的情況下,第一列是UserID
。 這就是為什么您獲得此列的第一個值的原因。
如果要獲取UserName
值,則可能需要更改查詢,例如:
SELECT UserName from Users
而且看起來您忘記了在查詢中使用WHERE
子句,因為您想從UserID
獲取UserName
。 您可能需要使用using
語句來處理SqlCeConnection
和SqlCeCommand
。
完整的例子;
using(SqlCeConnection cn = new SqlCeConnection(@"Data Source = D:\Database\Training.sdf"))
using(SqlCeCommand cmd = cn.CreateCommand())
{
cmd.CommandText = "SELECT UserName from Users WHERE UserID = @id";
cmd.Parameters.AddWithValue("@id", (int)txtUserID.Text);
cn.Open();
TrainerNameBox.Text = cmd.ExecuteScalar().ToString();
}
您缺少WHERE子句以隔離要顯示的用戶名
int userID;
if(!Int32.TryParse(txtUserID.Text, out userID))
{
MessageBox.Show("Invalid User ID number");
return;
}
using(SqlCeConnection cn = new SqlCeConnection(@"Data Source = D:\Database\Training.sdf"))
using(SqlCeCommand cmd = new SqlCeCommand("SELECT UserName from Users WHERE UserID=@id;", cn))
{
cn.Open();
cmd.Parameters.AddWithValue("@id", userID);
object result = cmd.ExecuteScalar();
if(result != null)
TrainerNameBox.Text = result.ToString();
else
MessageBox.Show("No user for ID=" + userID.ToString());
}
注意, ExecuteScalar
返回第一行的第一列,因此您需要從查詢中刪除UserID字段,如果找不到該用戶,則需要檢查是否為空。
如果用戶鍵入無效的ID,則直接將ToString()方法應用於ExecuteScalar可能會引發異常。 還有驗證用戶輸入的問題。 如果您為用戶標識鍵入一個非數字值,則轉換將失敗。 在這種情況下,您需要使用Int32.TryParse檢查輸入
嘗試這個:
Dataset ds = cmd.ExecuteDataset().ToString();
TrainerNameBox.Text = ds.tables[0].Rows[0][1].toString();
TrainerIDBox.Text = ds.tables[0].Rows[0][0].toString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.