2013-11-09 95 views
0

我试图制作一个实用程序来生成SQL表的Insert脚本以及关系表。从字符串中删除一个不断变化的值

我得到了c#中的所有值。

现在我想从script.most中删除一个列名及其值,可能是标识列。例如:
例如。

字符串我有(而保持与表的名称改变和变化)

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

现在我知道我必须删除客户ID。 (有时需要用@some变量替换)

请给我一个有效的方法来检索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); 

回答

0

创建一个特殊的CLAS InsertQuery存储对列名与列值,然后如果你总是需要一个表的删除或更改标识,你会知道它是在一个列表的第一个指数/数组/无论您用于存储这些对。

定义一个删除此列的方法,您很好。

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

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

相信我。仅使用字符串操作来构建这样的工具并不是一个好主意。最终你会想要添加更多的功能,而且你会被代码难以扩展。封装是一种方法。