2016-06-05 6 views
-1

Ich möchte die Daten in der Datenbank zu aktualisieren, aber ich möchte die Bedingung verwenden Wo Der folgende Code funktioniert gut zum Einfügen von Daten .... Dieser Code in der Klasse (DB_Access)Aktualisieren der Werte Tabelle mit generischen Wörterbuch, wo Anweisung

public static string CreateInsertSql(string table, IDictionary<string, string> parameterMap) 
    { 
     var keys = parameterMap.Keys.ToList(); 
     // ToList() LINQ extension method used because order is NOT 
     // guaranteed with every implementation of IDictionary<TKey, TValue> 
     var sql = new StringBuilder("INSERT INTO ").Append(table).Append("("); 

     for (var i = 0; i < keys.Count; i++) 
     { 
      sql.Append(keys[i]); 
      if (i < keys.Count - 1) 
       sql.Append(", "); 
     } 

     sql.Append(") VALUES("); 

     for (var i = 0; i < keys.Count; i++) 
     { 
      sql.Append('@').Append(keys[i]); 
      if (i < keys.Count - 1) 
       sql.Append(", "); 
     } 

     return sql.Append(")").ToString(); 
    } 
    public void SqlInsert(string table, IDictionary<string, string> parameterMap) 
    { 
     if (conn.State.ToString() == "Closed") 
     { 
      conn.Open(); 
     } 

      { 
      using (var command = conn.CreateCommand()) 
       { 
        command.Connection = conn; 
        command.CommandText = CreateInsertSql(table, parameterMap); 
        foreach (var pair in parameterMap) 
        command.Parameters.Add(pair.Key, pair.Value); 
        command.ExecuteNonQuery(); 
       } 
      } 
    } 

den folgenden Code verwenden zu implementieren ( DB_Access access = neue DB_Access();)

access.SqlInsert("`seal`", new Dictionary<string, string>() 
        { 
         { "s_name",txt_item.Text }, 
         { "s_qty",txt_qty.Value.ToString() }, 
         { "s_sn",txt_sn.Text }, 
         { "s_moon",txt_moon.Text }, 
         { "s_market",txt_market.Text }, 
         { "s_date", txt_date.Value.ToString("yyyyMMdd") }, 
         { "s_detiles",txt_det.Text }, 
         { "s_pay",groupBox2.Text }, 

        }); 

> aber ich verwenden, um diesen Code für Update-Daten .. aber nicht arbeiten .... in der Klasse DB_Access

public static string CreateEditSql(string table, IDictionary<string, string> parameterMap) 
    { 
     var keys = parameterMap.Keys.ToList(); 
     // ToList() LINQ extension method used because order is NOT 
     // guaranteed with every implementation of IDictionary<TKey, TValue> 

     var sql = new StringBuilder("UPDATE ").Append(table).Append(" SET "); 

     for (var i = 1; i < keys.Count; i++) 
     { 
      sql.Append(keys[i]).Append(" = @").Append(keys[i]); 
      if (i < keys.Count - 1) 
       sql.Append(", "); 
     } 

     return sql.Append(" WHERE ").Append(keys[0]).Append(" = @").Append(keys[0]).ToString(); 
    } 

    public void SqlEdit(string table, IDictionary<string, string> parameterMap) 
    { 
     if (conn.State.ToString() == "Closed") 
     { 
      conn.Open(); 
     } 

     { 
      using (var command = conn.CreateCommand()) 
      { 
       command.Connection = conn; 
       command.CommandText = CreateEditSql(table, parameterMap); 
       foreach (var pair in parameterMap) 
        command.Parameters.Add(pair.Key, pair.Value); 
       command.ExecuteNonQuery(); 
      } 
     } 
    } 

die Meldung Error (Ein Element mit demselben Schlüssel wird bereits hinzufügen) ....

Abfrage hängt das Problem auf den Namen des Mitarbeiters nicht id .. und ich brauche bearbeiten Name ....... Bitte helfen Sie mir

Antwort

0

Gelöst:

public static string CreateEditSql(string table, IDictionary<string, string> parameterMap, string werename, string weretext) 
    { 
     var keys = parameterMap.Keys.ToList(); 
     // ToList() LINQ extension method used because order is NOT 
     // guaranteed with every implementation of IDictionary<TKey, TValue> 

     var sql = new StringBuilder("UPDATE ").Append(table).Append(" SET "); 

     for (var i = 0; i < keys.Count; i++) 
     { 
      sql.Append(keys[i]).Append(" = @").Append(keys[i]); 
      if (i < keys.Count - 1) 
       sql.Append(", "); 
     } 

     return sql.Append(" WHERE ").Append("`").Append(werename).Append("`").Append(" = ").Append(weretext).ToString(); 
    } 

    public void SqlEdit(string table, IDictionary<string, string> parameterMap,string werename , string weretext) 
    { 
     if (conn.State.ToString() == "Closed") 
     { 
      conn.Open(); 
     } 

     { 
      using (var command = conn.CreateCommand()) 
      { 
       command.Connection = conn; 
       command.CommandText = CreateEditSql(table, parameterMap,werename,weretext); 
       foreach (var pair in parameterMap) 
        command.Parameters.Add(pair.Key, pair.Value); 
       command.ExecuteNonQuery(); 
      } 
     } 
    } 
access.SqlEdit("`employee`", new Dictionary<string, string>() 
       { 
        // { "e_name",txt_nameedit.Text }, 
        { "e_name",txt_name.Text }, 
        // { "e_pic",ImageData.ToString() }, 
        // { "e_datebegin",txt_bigdate.Value.ToString("yyyyMMdd") }, 
        //{ "e_datebirth",txt_date.Value.ToString("yyyyMMdd") }, 
        //{ "e_loc",txt_loc.Text }, 
        // { "e_mony",txt_mony.Text }, 
        // { "e_mob",txt_mob.Text }, 
        // { "e_use",txt_user.Text }, 
        // { "e_pass",txt_pass.Text }, 
        // { "e_prv",txt_prv.Text }, 

       }, "e_name", txt_nameedit.Text); 
Verwandte Themen