Delphi Prismで記述してみた。
以下ソース
method MainForm.BuildSql(obj : System.Object) : String;
var
FldList : String;
ValList : String;
t : System.Type;
PropArry : Array of PropertyInfo;
pv : Object;
begin
//渡された型を取り出して
t := obj.GetType();
//プロパティの一覧を取得する
PropArry := t.GetProperties();
//全てのフィールド(プロパティ)を操作してInsert分を作成
FldList := '';
ValList := '';
for each Prop : PropertyInfo in PropArry do
begin
FldList := FldList + Prop.Name + ',';
pv := Prop.GetValue(obj, nil);
//Value句 文字列は''で囲
if (pv.GetType().Name = 'String') then
begin
ValList := ValList + ''''+ pv.ToString() + ''',';
end
else
begin
ValList := ValList + pv.ToString() + ",";
end;
end;
Var Sb := new System.Text.StringBuilder();
Sb.AppendLine('INSERT INTO ' + t.Name + '(' + FldList.Remove(FldList.Length - 1) + ')');
Sb.AppendLine('Values (' + ValList.Remove(ValList.Length - 1) + ')');
Result := Sb.ToString();
end;
ちなみにC#で書くと
private String BuildSQL(object o)
{
//渡された型を取り出して
Type t = o.GetType();
//プロパティの一覧を取得する
System.Reflection.PropertyInfo[] PropArry = t.GetProperties();
//全てのフィールド(プロパティ)を操作してInsert分を作成
string FldList = "";
string ValList = "";
foreach (PropertyInfo Prop in PropArry)
{
FldList = FldList + Prop.Name + ",";
Object pv = Prop.GetValue(o, null);
//Value句 文字列は''で囲
if (pv.GetType().Name == "String")
{
ValList = ValList + "'" + pv.ToString() + "',";
}
else
{
ValList = ValList + pv.ToString() + ",";
}
}
StringBuilder Sb = new StringBuilder();
Sb.AppendLine("INSERT INTO " + t.Name + "(" + FldList.Remove(FldList.Length - 1) + ")");
Sb.AppendLine("Values (" + ValList.Remove(ValList.Length - 1) + ")");
return (Sb.ToString());
}
こんな感じかな