首页 \ 问答 \ 如何有效地查询数据库,必要时添加行,并获得结果(How to efficiently query database, adding row if necessary, and get results)

如何有效地查询数据库,必要时添加行,并获得结果(How to efficiently query database, adding row if necessary, and get results)

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

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


I'm using SQL Server Compact in my C# project. My database has a Users table that has two columns - an ID column (PRIMARY KEY) and a Username column. I keep track of various users that interface with my system by inserting their username in the Users table.

When a user contacts the system, I want to record their name in the table if they aren't already there. Obviously, I could add the UNIQUE keyword to the Username column, but that means I need to handle exceptions for duplicate entry attempts. Once the name is in the table - either because it already exists or I had to add it - I need to get the corresponding ID.

Here's some working code to shoot at.

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

Is there any way to do this more efficiently?


原文:https://stackoverflow.com/questions/5864426
更新时间:2020-02-15 08:09

最满意答案

ActionView :: Template :: Error(找不到json的输入)

simple_form simple_form 不支持 JSON数据类型 。 但是,您可以覆盖应解决问题的输入类型

<%= f.input :ui_layout, as: :text, :label => ('UI Layout (json)'), :input_html => {:rows => 2} %>

ActionView::Template::Error (No input found for json)

By natively, simple_form doesn't support JSON datatype. However you can overwrite the input type which should resolve the problem

<%= f.input :ui_layout, as: :text, :label => ('UI Layout (json)'), :input_html => {:rows => 2} %>

相关问答

更多
  • 原来bartt-ssl_requirement gem覆盖:url_for的方式与Rails 4.2不兼容。 删除该gem解决了这个问题。 Turns out the bartt-ssl_requirement gem overrides :url_for in a way that is not compatible with Rails 4.2. Removing that gem resolved the issue.
  • 您遇到的错误不是由您提供的代码引起的。 你可能正在使用强参数,并有一个像这样的方法: def purchase_requisition_params params.require(:purchase_requisition).permit(# some list of attributes #) end 问题是params[:purchase_requisition]不存在。 可能是因为视图中的form_for未引用purchase_requisition对象。 尝试添加as:到您的form_for ...
  • 我找到了罪魁祸首。 基本上,在所有以前版本的Rails中,输入行没有兄弟: [ ] 而在Rails 4.2中,表单中的输入似乎伴随着许多其他隐藏的输入字段: [ ,
  • 看来Rails 4.2 EOL的答案已经在http://rubyonrails.org/maintenance/上得到了回答。 关键点是: “新功能仅添加到主分支,并且不会在修补程序版本中提供。” “只有最新的发行版系列才会收到错误修复。” “对于主要的安全问题,当前版本系列,下一个最新版本和最后一个附加主要系列将获得补丁和新版本。” “对于较小的安全问题,目前的发布系列和下一个最新版本将会收到补丁和新版本。” 另外,针对Rails 4.2, Rails 5.1.0.rc1的发行说明指出,Rails 4.2 ...
  • 传递给register_server的块需要返回一个Capybara :: Driver :: Base实例(Capybara :: Selenium :: Driver派生自)。 通过在创建实例后设置driver_path ,您的块实际上会返回一个字符串。 将Chrome.driver_path设置移出块或者交换register_driver块内两行的顺序将解决您遇到的问题 Capybara.register_driver :selenium_chrome do |app| Selenium::Web ...
  • 我认为你是正确的Rails 3中的ActiveRecord本身不支持JSON。 您的错误的原因是,给定复杂的数据类型(在本例中为Hash),ActiveRecord将首先将其序列化为字符串,默认序列化为YAML。 这就是错误信息中的---来自 - 这是YAML标题。 一个快速的解决方案是在将Hash分配给您的属性之前将其转换为JSON: hsh = { name: "John" } b.meta = hsh.to_json b.save 尽管如此,这会变得很乏味。 相反,在序列化此属性时,您可以告诉Act ...
  • 我相信formhelper使用模式生成它的字段,并且由于hstore中的项可以变化,所以它不能自动生成这些字段。 除了实现细节之外,您可以迭代对象( 源 )中的值: <% f.grid.attributes.try(:each) do |key, value| %> <%= f.text_field key, :input_html => {:value => value } %> <% end %> I believe that formhelper generates its fields wit ...
  • ActionView :: Template :: Error(找不到json的输入) simple_form 上 , simple_form 不支持 JSON数据类型 。 但是,您可以覆盖应解决问题的输入类型 <%= f.input :ui_layout, as: :text, :label => ('UI Layout (json)'), :input_html => {:rows => 2} %> ActionView::Template::Error (No input found for jso ...
  • (1)不喜欢在结果表结果中命名字段。 (2)我会根据你要做的事情重构数据模型。 把事情简单化。 在这种情况下,您似乎不需要存储Json。 该表称为结果...为什么每个结果/事件都没有表条目? 运动员有很多结果,结果属于用户。 每个结果都是一个单独的条目,而不是试图将所有结果推入哈希。 我确信你有理由想要这样做,但我想不出有什么好处。 拥有has_many允许你说@ athlete.results并循环遍历它们,这似乎是你想要做的。 (1) Don't like naming a field on the r ...
  • 您可以轻松使用to_json方法, send_data和处置标头: 应用程序/控制器/ application_controller.rb class ApplicationController < ActionController::Base def users_json data = User.all.to_json send_data data, :type => 'application/json; header=present', :disposition => "attach ...

相关文章

更多

最新问答

更多
  • 如何检索Ember.js模型的所有属性(How to retrieve all properties of an Ember.js model)
  • maven中snapshot快照库和release发布库的区别和作用
  • arraylist中的搜索元素(Search element in arraylist)
  • 从mysli_fetch_array中获取选定的值并输出(Get selected value from mysli_fetch_array and output)
  • Windows Phone上的可用共享扩展(Available Share Extensions on Windows Phone)
  • 如何在命令提示符下将日期设置为文件名(How to set file name as date in command prompt)
  • 如何在Laravel 5.2中使用paginate与关系?(How to use paginate with relationships in Laravel 5.2?)
  • 从iframe访问父页面的id元素(accessing id element of parent page from iframe)
  • linux的常用命令干什么用的
  • Feign Client + Eureka POST请求正文(Feign Client + Eureka POST request body)
  • 怎么删除禁用RHEL/CentOS 7上不需要的服务
  • 为什么Gradle运行测试两次?(Why does Gradle run tests twice?)
  • 由于有四个新控制器,Auth刀片是否有任何变化?(Are there any changes in Auth blades due to four new controllers?)
  • 如何交换返回集中的行?(How to swap rows in a return set?)
  • 在android中的活动之间切换?(Switching between activities in android?)
  • Perforce:如何从Depot到Workspace丢失文件?(Perforce: how to get missing file from Depot to Workspace?)
  • Webform页面避免运行服务器(Webform page avoiding runat server)
  • 在ios 7中的UITableView部分周围绘制边界线(draw borderline around UITableView section in ios 7)
  • 内存布局破解(memory layout hack)
  • 使用Boost.Spirit Qi和Lex时的空白队长(Whitespace skipper when using Boost.Spirit Qi and Lex)
  • 我们可以有一个调度程序,你可以异步添加东西,但会同步按顺序执行吗?(Can we have a dispatcher that you can add things todo asynchronously but will be executed in that order synchronously?)
  • “FROM a,b”和“FROM a FULL OUTER JOIN b”之间有什么区别?(What is the difference between “FROM a, b” and “FROM a FULL OUTER JOIN b”?)
  • Java中的不可变类(Immutable class in Java)
  • bat批处理文件结果导出到txt
  • WordPress发布查询(WordPress post query)
  • 如何在关系数据库中存储与IPv6兼容的地址(How to store IPv6-compatible address in a relational database)
  • 是否可以检查对象值的条件并返回密钥?(Is it possible to check the condition of a value of an object and JUST return the key?)
  • 德州新起点计算机培训学校主要课程有什么?
  • GEP分段错误LLVM C ++ API(GEP segmentation fault LLVM C++ API)
  • “latin1_german1_ci”整理来自哪里?(Where is “latin1_german1_ci” collation coming from?)