从c#在数据库中输入数据

本文关键字:输入 数据 数据库 | 更新日期: 2023-09-27 18:00:27

我正在javascript中的一个变量中存储一个值。然后我创建了一个隐藏标签,以便从代码隐藏中访问变量并将其存储在数据库中。但由于某种原因,在cmd.ExecuteNonQuery();线上,我在尝试在数据库中输入数据时出现了以下错误:

ERROR: 42601: syntax error at end of input

以下是asp中的输入标签:

    <div>
        <input id="hidden_value" type="hidden" runat="server"/>
         <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    </div>

以下是我如何在javascript中调用隐藏输入并将其设置为值:

var store_altitude;
store_altitude = some_value;
document.getElementById("hidden_value").value=store_altitude;

下面是代码头:

 using (NpgsqlConnection conn = new NpgsqlConnection(connstring))
            {
                try
                {
                    conn.Open();
                    Response.Write(hidden_value.Value);
                    NpgsqlCommand cmd = new NpgsqlCommand("insert into altitude select nextval('altitude_id_seq'),"+hidden_value.Value, conn);
                    cmd.ExecuteNonQuery();

                    conn.Close();
                }
                catch (Exception)
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "", "$(document).ready(function(){alert('problem with connection')});", true);
                }
            }

从c#在数据库中输入数据

您应该NEVER,EVER通过字符串串接和参数来构建sql。它速度慢,容易出错,而且您已经对SQL注入敞开了大门。在您的情况下,看起来任何网络黑客都可以轻而易举地完全访问您的数据库

由于您正在编写原始sql而不使用ORM,因此不幸的是,您会遇到ADO.NET的API非常糟糕的事实。我强烈建议使用类似dapper的东西,这样可以大致如下地表达您的查询:

conn.Execute(@"
    insert into altitude
    values (extval('altitude_id_seq'), @hiddenVal)",
       new { hiddenVal = hidden_value.Value});

还有其他轻量级ADO.NET包装;许多人都很好,dapper只是碰巧很出名。

作为一个小问题,虽然不是严格要求的,但我发现包含要插入的列名比按DB列出的任何顺序隐式使用列名更具可读性。但是,如果你绝对确定模式不会改变,那就没有问题了。

您可以从hidden_value和代码端用户请求["hidden_vvalue"]中删除runat="server";以获取hidden_value的值。