从字符串中删除某个值,该值不断变化

时间:2013-11-09 07:56:42

标签: c# string

我正在尝试创建一个实用程序来生成sql表的Insert脚本以及关系表。

我在c#中获得了所有值。

现在我想从脚本中删除一个列名及其值。很可能是标识列 例如。

我拥有的字符串(随表名不断变化而变化)

INSERT Core.Customers
([customerId],[customername],[customeradress],[ordernumber])
               Values(123,N'Rahul',N'244 LIZ MORN',2334)

现在我知道我必须删除CustomerId。 (有时候需要替换@somevariable)

请给我一个有效的方法来检索customerId值和删除列名称和值。

我一直在寻找一种方法来按名称列找到coloumn值。

我正在做的事情如下:我知道它效率低下并且可能导致问题但是现在它工作顺利。

     public string GetColumnValueToForDesiredColumnName(string row, TableInfo tableinfo, string NameofColumnTOfindvalueFor)
    {
        Dictionary<string, string> ValueTypedictionary = new Dictionary<string, string>();
        string value = null;

// This Code is Quite messy Need some suggestion on this one
    string[] plusseperatedinsert = row.Replace("INSERT " + "[" + tableinfo.Schema + "].[" + tableinfo.TableName + "]", string.Empty).Trim().Replace("VALUES", "+").Split('+');

    string[] coulumnvalues = plusseperatedinsert[0].Replace("(", string.Empty).Replace(")", string.Empty).Replace("(", string.Empty).Replace("[", string.Empty).Replace("]", string.Empty).Trim().Split(',');

    string[] valuesfield = plusseperatedinsert[1].Replace("(", string.Empty).Replace(")", string.Empty).Replace("(", string.Empty).Replace("[", string.Empty).Replace("]", string.Empty).Trim().Split(',');

        for (int index = 0; index < coulumnvalues.Length; index++)
        {
            ValueTypedictionary.Add(coulumnvalues[index], valuesfield[index]);
        }

        ValueTypedictionary.TryGetValue(NameofColumnTOfindvalueFor, out value);

        return value;
    }

this gives 123 as value .

and then I am using string.Replace("[customerId],",string.empty).Replace(123,string.empty); 

1 个答案:

答案 0 :(得分:0)

创建一个特殊的clas InsertQuery,它使用列值存储列名称对,然后如果您总是需要删除或更改表的Id,您将知道它位于列表的第一个索引上/数组/用于存储这些对的任何内容。

定义一个删除此列的方法,你很高兴。

所以这是代码。你可能会以某种方式改变它,它只是一个概念证明。

public class InsertQuery
{
    private class Column
    {
        public string Name { get; set; }
        public string Value { get; set; }
    }

    private readonly List<Column> columns = new List<Column>();
    private readonly string tableName;

    public InsertQuery(string tableName)
    {
        this.tableName = tableName;
    }

    public void AddColumn(string name, string value)
    {
        columns.Add(new Column { Name = name, Value = value });
    }

    public string RemoveColumnByName(string columnName)
    {
        var column = columns.First(c => c.Name == columnName);
        var value = column.Value;
        columns.Remove(column);
        return value;
    }

    public string RemoveIdColumn()
    {
        var column = columns.First();
        var value = column.Value;
        columns.RemoveAt(0);
        return value;
    }

    public override string ToString()
    {
        var sb = new StringBuilder();
        sb.Append("INSERT INTO ");
        sb.Append(tableName);
        sb.Append(" (");

        // append first all column names and then their values

        return sb.ToString();
    }
}

相信我。使用字符串操作构建这样的工具并不是一个好主意。随着时间的推移,您将需要添加更多功能,并且您将无法使用难以扩展的代码。封装是一种方法。