我正在尝试创建一个实用程序来生成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);
答案 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();
}
}
相信我。使用字符串操作构建这样的工具并不是一个好主意。随着时间的推移,您将需要添加更多功能,并且您将无法使用难以扩展的代码。封装是一种方法。