簡體   English   中英

從C#輸入數據庫中的數據

[英]Input data in database from c#

我將值存儲在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);
                }
            }

永遠不要通過帶有參數的字符串連接來構建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包裝器。 許多都很好, 小巧的人恰好是眾所周知的。

作為一個次要問題,盡管不是嚴格要求,但我發現將要插入的列名包括在數據庫中列出的任何順序中而不是隱式使用它們更容易閱讀。 但是,如果您完全確定架構不會更改,則沒有問題。

您可以從hidden_​​value中刪除runat =“ server”,並在代碼端用戶請求中刪除[hidden_​​value“]; 獲取hidden_​​value的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM