2017-08-14 66 views
1

我試圖使用Npgsql(PostgreSQL)和Visual Studio 2015更新列的值。這是「忘記密碼?」形成。嘗試使用Npgsql更新C#列

用戶需要輸入兩個變量才能完成重置(如果條件): 1.輸入SSN(又名RG在巴西);和 2.輸入不可更改的用戶特定代碼。

會發生什麼情況是:當我嘗試更改該值(使用下面的命令)時,沒有任何反應。

NpgsqlCommand command = new NpgsqlCommand("UPDATE dbschema.dbtable SET senha = '" + textBox2.Text + "' WHERE rg = '" + textBox2.Text + "'"); 

if條件完全執行(我綁了,如果命令一個消息框,它表明密碼已成功reseted - 一個跡象,表明如果條件確實執行) - 那並不是唯一現在不會發生密碼更新(這可能是版本中的一個小功能,因爲我更喜歡在數據庫上重置自己)。我在代碼中嘗試了一些更改,但沒有成功。

在此先感謝您的幫助。

盧卡斯

+0

這不是很清楚你實際上問。如果你說你的查詢沒有更新數據庫,那麼檢查你的輸入,或者努力編碼你匹配的值。最好也使用參數化查詢。您現有的命令容易受到SQL注入的影響。作爲最後的評論,你在SQL命令的兩個值中使用'textbox2.Text' - 這看起來不正確。 –

+0

我試圖通過驗證唯一的用戶代碼和SSN來更新「密碼」列上的值。但是,當點擊「更新密碼」按鈕時,該值不會被更新。 –

+0

看起來好像你在數據庫中以純文本形式存儲密碼,這在安全方面是一個相當大的紅旗。 – Alejandro

回答

0

你有實際打開一個數據庫連接並執行命令,例如:

using (var conn = new NpgsqlConnection(<connection string>)) { 
    var command = new NpgsqlCommand("UPDATE dbschema.dbtable SET senha = '" + textBox2.Text + "' WHERE rg = '" + textBox2.Text + "'", conn); 
    conn.Open(); 
    command.ExecuteNonQuery(); 
} 

注意,你傳遞參數的方式也開到SQL注入攻擊。你應該看看參數化查詢。

+0

是的,我打開了。因爲認爲它在上下文中並不重要... –

+0

BTW:NpgsqlConnection con = new NpgsqlConnection(「Server = localhost; Port = 5432; User Id = admin; Password = databasepw; Database = dbdb;」); con.Open(); –

+0

您是否將該連接與命令關聯? –

0

如果您嘗試執行NpgsqlCommand

另外,您最好使用參數化查詢。

見這個例子:INSERT data from Textbox to Postgres SQL

+0

我已經使用了一個類似於我在登錄時使用的代碼。因爲它將數據成功發送到PostgreSQL(並在本例中正確吸收文本框中的數據)......但我現在嘗試您的建議。 TKS! –