2016-02-14 45 views
-2

這是我們的代碼,用於防止從我們的C#程序中將相同的數據添加到SQL中,但只有第一個相同的數據不會被添加進來。其餘的添加相同的數據數據轉化爲SQL,儘管我們在C#程序中有所預防。有人可以幫助我們排除故障嗎?如何防止從C#程序向SQL中添加相同的數據

Our C# code

+1

您應該直接將代碼發佈到網站。 – jmargolisvt

+1

將代碼添加爲圖片不是提問的好方法。 –

+1

哪種RDBMS適用於?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

回答

0

計數插入

string constr = ConfigurationManager.ConnectionStrings["connstr"].ToString(); 
     SqlConnection con = new SqlConnection(constr); 
     string sql1 = "SELECT COUNT (client_id) FROM client WHERE client_id = '" + txtid.Text + "' "; 
     SqlCommand cmd = new SqlCommand(sql1, con); 
     con.Open(); 
     int temp = Convert.ToInt32(cmd.ExecuteScalar().ToString()); 
     if (temp >0) 
     { 
//show error message 
     } 
+2

這是允許SQL注入攻擊的好方法。 :-(你應該參數化你的語句 – Nicarus

1

爲了不重複在數據庫中的數據的數據的值通常設置一些約束到數據庫。通過在數據庫中有一個唯一的字段,可以防止多次添加到數據庫。

目前,您也可從數據庫中獲取數據,以檢查它是否已經存在,並創建額外費用,只需操縱數據庫的設計使其不會接受同一列輸入兩次

0

你可以檢查您要添加的記錄,如果它不存在,則將其添加到表中:

SqlConnection _cnt = new SqlConnection(); 
_cnt.ConnectionString = "Your Connection String"; 
SqlCommand _cmd = new SqlCommand(); 
_cmd.Connection = _cnt; 
_cmd.CommandType = System.Data.CommandType.Text; 
_cmd.CommandText = "SELECT id FROM myTable where [email protected]"; 

_cmd.Parameters.Add("@Name", string); 
_cmd.Parameters["@Name"].Value = newCatTitle; 
_cnt.Open(); 
var idTemp = _cmd.ExecuteScalar(); 

_cmd.Dispose(); 
_cnt.Close(); 
_cnt.Dispose(); 
if (idTemp == null) 
{ 
    //Insert into table 
} 
else 
{ 
    //Message it already exists 
} 
+1

SQL注入的人...'_cmd.Parameters.Add(...)'並不困難 – Nicarus

+0

@Nicarus其實我試圖做到這一點,但我找不到出來如何! –

+0

看看這個例子:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx – Nicarus

相關問題