2011-05-03 44 views
1

我在C#項目中使用SQL Server Compact。我的數據庫有一個用戶表,它有兩列 - 一個ID列(PRIMARY KEY)和一個用戶名列。我通過在Users表中插入用戶名來跟蹤與我的系統進行交互的各種用戶。如何高效地查詢數據庫,如有必要添加行,並獲得結果

當用戶聯繫系統時,如果他們不在那裏,我想在表中記錄他們的名字。顯然,我可以將UNIQUE關鍵字添加到用戶名列,但這意味着我需要處理重複輸入嘗試的異常。一旦名字在表中 - 或者因爲它已經存在或者我不得不添加它 - 我需要獲得相應的ID。

這裏有一些工作代碼拍攝。

public void GetUserId(string username) 
{ 
    using (SqlCeCommand selcmd= new SqlCeCommand(
     "SELECT * FROM users WHERE username = @user", conn)) 
    { 
     selcmd.Parameters.AddWithValue("@user", username); 
     SqlCeResultSet rs = selcmd.ExecuteResultSet(ResultSetOptions.Scrollable); 
     if (!rs.HasRows) 
     { 
      using (SqlCeCommand inscmd= new SqlCeCommand(
       "INSERT INTO users (username) values (@user)", conn)) 
      { 
       inscmd.Parameters.AddWithValue("@user", username); 
       inscmd.ExecuteNonQuery(); 
      } 

      rs = selcmd.ExecuteResultSet(ResultSetOptions.Scrollable); 
     } 

     rs.ReadFirst(); 

     return (rs.GetInt32(rs.GetOrdinal("id"))); 
    } 
} 

有什麼辦法可以更有效地做到這一點?

+0

那麼,這應該肯定會進入存儲過程。然後,不管你做什麼,它只會是一次訪問數據庫。 – 2011-05-03 02:20:19

+0

同意。唯一的問題是SQL Server Compact不支持存儲過程。 – 2011-05-03 02:23:26

+0

升級時間。 – 2011-05-03 02:24:00

回答

1

你的解決方案是SQL Server精簡的最佳方法 - 其他提出的解決方案使用的語法無法在SQL Server精簡

+0

再次感謝您的幫助。 – 2011-05-03 21:41:39

-1

你可以這樣做:

INSERT IF NOT EXISTS INTO `tablename` yadda yadda yadda 

不會引發異常。

這是一個SQL問題,不C#或.net一個,順便

+0

SQL Server Compact似乎不支持'INSERT IF NOT EXISTS ...'語法。 – 2011-05-03 02:34:41

+0

然後看到你的問題的意見= P – Lacrymology 2011-05-03 02:36:26

+0

但你可以做的另一件事是SELECT查找名稱,如果沒有行返回,那麼INSERT – Lacrymology 2011-05-03 02:37:15

相關問題