我在C#项目中使用SQL Server Compact。我的数据库有一个Users表,它有两列 - 一个ID列(PRIMARY KEY)和一个Username列。我通过在Users表中插入用户名来跟踪与我的系统交互的各种用户。
当用户联系系统时,我想在表中记录他们的名字(如果他们不在那里)。显然,我可以将UNIQUE关键字添加到Username列,但这意味着我需要处理重复条目尝试的异常。一旦名称出现在表中 - 无论是因为它已经存在还是我必须添加它 - 我需要获得相应的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 :(得分:1)
您的解决方案是SQL Server Compact的最佳方法 - 其他提议的解决方案使用SQL Server Compact中不可用的语法
答案 1 :(得分:-1)
你可以这样做:
INSERT IF NOT EXISTS INTO `tablename` yadda yadda yadda
不会引发异常。
顺便说一下,这是一个SQL问题,而不是c#或.net问题。