C# 如何高效地查询数据库,必要时添加行,并获得结果
我在我的C#项目中使用SQL Server Compact。我的数据库有一个Users表,它有两列—ID列(主键)和Username列。我通过在users表中插入用户名来跟踪与我的系统交互的各种用户 当用户联系系统时,如果他们不在,我想在表中记录他们的名字。显然,我可以将UNIQUE关键字添加到Username列,但这意味着我需要处理重复输入尝试的异常。一旦名称出现在表中(因为它已经存在或者我必须添加它),我需要获得相应的ID 这里有一些可以使用的代码C# 如何高效地查询数据库,必要时添加行,并获得结果,c#,.net,sql-server-ce,C#,.net,Sql Server Ce,我在我的C#项目中使用SQL Server Compact。我的数据库有一个Users表,它有两列—ID列(主键)和Username列。我通过在users表中插入用户名来跟踪与我的系统交互的各种用户 当用户联系系统时,如果他们不在,我想在表中记录他们的名字。显然,我可以将UNIQUE关键字添加到Username列,但这意味着我需要处理重复输入尝试的异常。一旦名称出现在表中(因为它已经存在或者我必须添加它),我需要获得相应的ID 这里有一些可以使用的代码 public void GetUserId
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")));
}
}
有什么方法可以更有效地执行此操作吗?您可以执行以下操作:
INSERT IF NOT EXISTS INTO `tablename` yadda yadda yadda
这不会引起例外
这是一个SQL问题,不是c#或.net问题,顺便说一句您的解决方案是SQL Server Compact的最佳方法-其他建议的解决方案使用SQL Server Compact中不可用的语法好吧,这肯定应该放在存储过程中。然后,无论你做什么,只需一次访问数据库。同意。唯一的问题是SQL Server Compact不支持存储过程。是的。。在互联网上用于许多商品。您的解决方案是SQL Server Compact的最佳方法谢谢@ErikEJ。如果您要发布一个快速答案,我将接受。SQL Server Compact似乎不支持“如果不存在则插入…”语法。然后查看您的问题上的注释=p但您可以做的另一件事是选择查找名称,如果没有返回行,则插入我理解,但使用其他数据库解决方案不是一个选项。关键是,我有一个有效的解决方案,但我不相信这是最有效的解决方案。这就是我要找的。我马上就发布工作代码,以便进行potshots。