gpt4 book ai didi

c# - C# 向数据库中输入数据

转载 作者:行者123 更新时间:2023-11-29 12:22:15 24 4
gpt4 key购买 nike

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

ERROR: 42601: syntax error at end of input

下面是asp中的input标签:

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

最佳答案

您应该永远,永远通过带参数的字符串连接构建 sql。它很慢,容易出错,并且您已经打开了 SQL 注入(inject)的大门。在您的情况下,看起来任何网络黑客都可以轻而易举地获得对您数据库的完全访问权限

由于您正在编写原始 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恰好是众所周知的。

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

关于c# - C# 向数据库中输入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15020774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com