C# 从VisualStudio连接的服务创建表

C# 从VisualStudio连接的服务创建表,c#,.net,C#,.net,鉴于VisualStudio的成熟度,如果有人还没有为此构建工具,我会感到惊讶。我在Visual Studio 2017中有一个“连接服务”(过去称为服务参考)。我的要求是基于该服务中的对象在数据库中创建SQL Server表。。i、 帐户、用户等。是的,我可以循环遍历每个对象的属性并创建SQL来创建数据库表,但我们已经得到了,这有点疯狂。我想知道是否有人创建了T4模板或扩展,允许这种类型的功能???谢谢。我找到了这篇相关文章,但它要求您了解对象的格式,最佳解决方案将读取WSDL并动态创建相应的

鉴于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个汉都是一个人怎么办?”
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;
    }