如何有效地查询数据库,必要时添加行,并获得结果

时间:2011-05-03 02:18:10

标签: c# .net sql-server-ce

我在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")));
    }
}

有没有办法更有效地做到这一点?

2 个答案:

答案 0 :(得分:1)

您的解决方案是SQL Server Compact的最佳方法 - 其他提议的解决方案使用SQL Server Compact中不可用的语法

答案 1 :(得分:-1)

你可以这样做:

INSERT IF NOT EXISTS INTO `tablename` yadda yadda yadda

不会引发异常。

顺便说一下,这是一个SQL问题,而不是c#或.net问题。