asp.net数据库表结构导出Word

.aspx

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
    <style type="text/css">
    table{border-collapse:collapse}
    td{font-size: medium}
    .tr1 td{ background-color:Aqua;font-size :larger; }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>     
       <asp:Button runat="server" ID="btnExport2" Text="Fubon导出WORD" onclick="btnExport_Click" />
       <asp:Literal runat="server" ID="ltlBody"></asp:Literal>
    </div>
    </form>
</body>
</html>

 .aspx.cs

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ltlBody.Text = GetTableStr("FubonConnectionString");
            }          

        }

        string GetTableStr(string conStr)
        {
            DataBase db = null;
            if (string.IsNullOrEmpty(conStr))
                db = new DataBase();
            else
                db = new DataBase(conStr);

            string sql = @"
select TableName = O.name,
	OWNER = USER_NAME(O.uid),	
	FieldId = C.colid,
    FieldName = C.name,
	FieldType = T.name
		+ CASE
			WHEN T.name IN (N'decimal',N'numeric')
				THEN N'(' + CAST(C.prec as varchar) + N',' + CAST(C.scale as varchar) + N')'
			WHEN T.name = N'float' OR T.name like N'%char'
								   OR T.name like N'%binary'
				THEN N'(' + CAST(C.prec as varchar) + N')'
			ELSE N''
		  END,
    AllowNulls = 
          CASE
				WHEN C.isnullable = 1 THEN N''
				ELSE N' NOT'
		  END	+ N' NULL',
	FieldDescription = ISNULL(PFD.value, ''),
	DefileLength = C.length,
	FiledDefault = ISNULL(DF.text, N''),
	IsIDENTITY = COLUMNPROPERTY(O.id, C.name, N'IsIdentity'),
	IsComputed = COLUMNPROPERTY(O.id, C.name, N'IsComputed'),
	IsROWGUID = COLUMNPROPERTY(O.id, C.name, N'IsRowGuidCol'),
	IsPrimaryKey = CASE	
						WHEN OPK.xtype IS NULL THEN 0
						ELSE 1
					END
	FROM sysobjects O
		JOIN syscolumns C
			ON C.id = O.id AND OBJECTPROPERTY(O.id, N'IsUserTable') = 1
		JOIN systypes T
			ON T.xusertype = C.xusertype
		LEFT JOIN syscomments DF
			ON DF.id = C.cdefault
		LEFT JOIN sys.extended_properties PFD 
			ON PFD.major_id = C.id AND PFD.minor_id = C.colid		
		LEFT JOIN sysindexkeys IDXK
			ON IDXK.id = O.id AND IDXK.colid = C.colid
		LEFT JOIN sysindexes IDX
			ON IDX.indid = IDXK.indid AND IDX.id =IDXK.id AND IDX.indid NOT IN(0,255)
		LEFT JOIN sysobjects OPK
			ON OPK.parent_obj = O.id AND OPK.name = IDX.name AND OBJECTPROPERTY(OPK.id, N'IsPrimaryKey') = 1
ORDER BY O.name, C.colid";


            DataTable dt = db.GetDataSet(sql).Tables[0];
            if (dt == null || dt.Rows.Count == 0) return "";

            string tableName = dt.Rows[0]["TableName"].ToString();
            const string tableStr = "<table border='1' width='100%'><tr><td align='center' style='background-color:Aqua'>TableName</td><td colspan='7'>";
            const string columnStr = "<tr class='tr1'><td align='center'>Id</td><td>ColumnName</td><td>DataType</td><td>DefaultValue</td><td>IsPrimaryKey</td><td>IsIdentity</td><td>AllowNulls</td><td>Description</td></tr>";

            StringBuilder sbTable = new StringBuilder();
            sbTable.Append(tableStr + tableName + "</td>" + columnStr);
            foreach (DataRow dr in dt.Rows)
            {
                if (tableName != dr["TableName"].ToString())
                {                  
                    sbTable.Append("</table><br />");
                    tableName = dr["TableName"].ToString();
                    sbTable.Append(tableStr + tableName + "</td>" + columnStr);
                }
                sbTable.AppendFormat("<tr><td align='center'>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td><td>{7}</td></tr>", dr["FieldId"].ToString(), dr["FieldName"].ToString(), dr["FieldType"].ToString(), dr["FiledDefault"].ToString().Replace("((", "").Replace("))", ""), dr["IsPrimaryKey"].ToString() == "1" ? "√" : "", dr["IsIDENTITY"].ToString().ToString() == "1" ? "√" : "", dr["AllowNulls"].ToString().Trim() == "NULL" ? "√" : "", dr["FieldDescription"].ToString());

            }
            sbTable.Append("</table>");

            return sbTable.ToString();
        }
               

        protected void btnExport_Click(object sender, EventArgs e)
        {
            string header = string.Format("<table width='100%'><tr><td align='center' style='font-size:17px;font-weight:bolder'>{0}</td></tr><tr><td align='center' style='font-size:13px'>({1})</td></tr></table>", "数据库字典", DateTime.Now.ToString("yyyy年MM月dd日"));
            ResponseWrite(header + "<br />" + GetTableStr("FubonConnectionString"));
        }

        void ResponseWrite(string str)
        {
            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "UTF-8";
            Response.ContentEncoding = Encoding.GetEncoding("UTF-8");
            string filename = string.Format("数据库字典_{0}.doc", DateTime.Now.ToString("yyyyMMdd"));
            Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(filename,System.Text.Encoding.UTF8));
            Response.ContentType = "application/ms-word";
            Response.Write(@"    
    <style type='text/css'>
    table{border-collapse:collapse}
    td{font-size:14px}
    .tr1 td{ background-color:Aqua;font-size:15px}
    </style>");
            Response.Write(str);
            Response.End();
        }   
原文地址:https://www.cnblogs.com/gdjlc/p/2399518.html