C# 从VisualStudio连接的服务创建表
鉴于VisualStudio的成熟度,如果有人还没有为此构建工具,我会感到惊讶。我在Visual Studio 2017中有一个“连接服务”(过去称为服务参考)。我的要求是基于该服务中的对象在数据库中创建SQL Server表。。i、 帐户、用户等。是的,我可以循环遍历每个对象的属性并创建SQL来创建数据库表,但我们已经得到了,这有点疯狂。我想知道是否有人创建了T4模板或扩展,允许这种类型的功能???谢谢。我找到了这篇相关文章,但它要求您了解对象的格式,最佳解决方案将读取WSDL并动态创建相应的数据库表。。。好的,我能够通过这两个伟大的StackOverflow讨论想出某种解决方案:[code]公共静态DataTable ObjectToData(对象o,字符串名称){DataTable dt=new DataTable(名称);DataRow dr=dt.NewRow();dt.Rows.Add(dr);o.GetType().GetProperties().ToList().ForEach(f=>{try{f.GetValue(o,null);dt.Columns.Add(f.Name,f.PropertyType);dt.Rows[0][f.Name]=f.GetValue(o,null);}catch{}};返回dt;}看起来你在这里开的派对很有趣。这让我想起了“如果4个汉都是一个人怎么办?”C# 从VisualStudio连接的服务创建表,c#,.net,C#,.net,鉴于VisualStudio的成熟度,如果有人还没有为此构建工具,我会感到惊讶。我在Visual Studio 2017中有一个“连接服务”(过去称为服务参考)。我的要求是基于该服务中的对象在数据库中创建SQL Server表。。i、 帐户、用户等。是的,我可以循环遍历每个对象的属性并创建SQL来创建数据库表,但我们已经得到了,这有点疯狂。我想知道是否有人创建了T4模板或扩展,允许这种类型的功能???谢谢。我找到了这篇相关文章,但它要求您了解对象的格式,最佳解决方案将读取WSDL并动态创建相应的
var obj = ObjectToData(new SFSvc.Account(),"dbo.Account");
// checking whether the table selected from the dataset exists in the database or not
string exists = null;
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["quiz"].ConnectionString;
conn.Open();
try
{
SqlCommand cmd = new SqlCommand("SELECT * FROM sysobjects where name = '" + obj.TableName + "'", conn);
exists = cmd.ExecuteScalar().ToString();
}
catch (Exception exce)
{
exists = null;
}
if (exists == null)
{
if (exists == null)
{
StringBuilder sb = new StringBuilder();
sb.Append("CREATE TABLE " + obj.TableName);
sb.Append(" (");
foreach (DataColumn col in obj.Columns)
{
sb.Append(col.ColumnName + " varchar(MAX),");
}
string sql = sb.ToString().TrimEnd(',');
sql = sql + ")";
SqlCommand createtable = new SqlCommand("CREATE TABLE " + sql, conn);
createtable.ExecuteNonQuery();
exists = obj.TableName;
}
}
conn.Close();
}
using (SqlConnection cn = new SqlConnection())
{
cn.ConnectionString = ConfigurationManager.ConnectionStrings["quiz"].ConnectionString;
cn.Open();
using (SqlBulkCopy copy = new SqlBulkCopy(cn))
{
foreach(DataColumn c in obj.Columns)
{
copy.ColumnMappings.Add(c.ColumnName, c.ColumnName);
}
copy.DestinationTableName = obj.TableName;
copy.WriteToServer(obj);
}
cn.Close();
}
public static DataTable ObjectToData(object o, string theName)
{
DataTable dt = new DataTable(theName);
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
o.GetType().GetProperties().ToList().ForEach(f =>
{
try
{
f.GetValue(o, null);
dt.Columns.Add(f.Name, f.PropertyType);
dt.Rows[0][f.Name] = f.GetValue(o, null);
}
catch { }
});
return dt;
}