使用泛型字典where语句更新值表

时间:2016-06-05 23:48:12

标签: c#

我想更新数据库中的数据,但我想使用条件Where 以下代码适用于插入数据.... 类中的这段代码(DB_Access)

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

使用以下代码实现( DB_Access access = new 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 },

                    });
  
    

&GT;     但我使用此代码更新数据..但不工作     ....在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();
            }
        }
    }

消息错误(已添加具有相同键的项目) ....

  

查询问题取决于员工的姓名不是id ..我需要编辑姓名.......请帮帮我

1 个答案:

答案 0 :(得分:0)

解决:

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