簡體   English   中英

將數據從SQL Server Compact 4.0檢索到文本框

[英]Retrieve data from sql server compact 4.0 to textbox

我的Winform中有兩個文本框。 我想在第一個文本框中輸入一個userId,然后單擊一個按鈕在第二個文本框中正確顯示一個用戶名。 數據存儲在sql server compact中。 表名是Users ,該表包含兩列UserIDUserName

使用此代碼,我可以打開一個連接並從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語句來處理SqlCeConnectionSqlCeCommand

完整的例子;

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM