가능한 한 일반적으로 (DB 테이블을 생성하고 채우는) 함수를 작성하려고합니다.커스텀 클래스를 객체로 변환하기
제 문제는 다른 클래스에서 사용하고 싶습니다. 문제는 매우 일반적인이 순서대로 사용자 지정 클래스 데이터를 개체 목록으로 함수에 전달한 다음 다시 변환해야한다는 것입니다. 여기
내가 무엇을 가지고 :
public static void appenddatatotableRef(string connectionstring, string tablename, List<Object> values, string objecttype)
{
var properties = new List<System.Reflection.FieldInfo>();
if (objecttype == "PowerResults")
{
var data = values.OfType<PowRes>().ToList();
properties = typeof(PowRes).GetFields(BindingFlags.Public | BindingFlags.Instance).OrderBy(x => x.Name).ToList();
}
string columnam = "[" + properties[0].Name + "]";
string valstring = "@" + properties[0].Name;
for (int i = 1; i < properties.Count; i++)
{
columnam = columnam + ", [" + properties[i].Name + "]";
valstring = valstring + ", @" + properties[i].Name;
}
string commandtext = "INSERT INTO [" + tablename + "](" + columnam + ")" + "VALUES(" + valstring + ")";
using (var myconn = new OleDbConnection(connectionstring))
{
myconn.Open();
using (var cmd = new OleDbCommand())
{
foreach (var item in values)
{
cmd.CommandText = commandtext;
cmd.Parameters.Clear();
for (int i = 1; i < properties.Count; i++)
{
try
{
cmd.Parameters.AddWithValue("@" + properties[i].Name, properties[i].GetValue(item));
}
catch
{
}
}
cmd.Connection = myconn;
cmd.ExecuteNonQuery();
}
}
myconn.Close();
}
}
내가 List<PowerRes>
에 입력을 변경하고 데이터 값에서 변환을 제거하면이 잘 작동하지만 그것은 더 이상 일반적인 없습니다.
어떻게 든 일반적인 방식으로 만들 수 있습니까?
실무 솔루션 (올바른 방향으로 나를 가리켜 주셔서 감사합니다)! 수행 할 수 있습니다
public static void AppendToTable<T>(..., IEnumerable<T> items, ...) {
var properties = typeof(T).GetFields();
공개 회원 이름은 UpperCamelCase 여야합니다. – SLaks
BTW <이 작업을 수행하는 코드를 깔끔하게 작성했습니다. https://github.com/SLaks/ExcelExporter/blob/master/ExcelExporter/Exporters/SheetBase.cs#L26-L62 및 https://github.com/SLaks/ExcelExporter/blob/master/ExcelExporter/Exporters/TypedSheet를 참조하십시오. .cs – SLaks