Сегодня я хочу поделиться с вами инструментом, который я создал для генерации документов с описанием структуры баз данных. Это удобно использовать при разработке, чтобы легко выгружать структуры таблиц бизнес-систем. Также этот инструмент можно использовать как часть документации проекта для описания дизайна баз данных. Это значительно экономит время на составление таких документов. Для желающих скачать или обсудить данный инструмент — добро пожаловать!
///
public List<DBModel> ПолучитьСписокБД(string conStr)
{
//List<DBName> list =new List<DBName>();
string sql = "SELECT [name] FROM master.dbo.sysdatabases WHERE DBID > 6 ORDER BY [Name]";
try
{
using (SqlConnection connection = new SqlConnection(conStr))
{
var list = connection.Query<DBModel>(sql).ToList();
return list;
}
}
catch
{
return null;
}
}
/// <summary>
/// Получает список таблиц в конкретной базе данных
/// </summary>
/// <param name="conStr"></param>
/// <param name="dbName">Имя базы данных</param>
/// <returns></returns>
``` public List<TableModel> ПолучитьСписокТаблиц(string conStr, string dbName = "")
{
var list = new List<TableModel>();
//string sql = "SELECT TABLE_NAME as name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'";
string sql = "select a.name AS tableName, CONVERT(NVARCHAR(100), ISNULL(g.[value], '')) AS tableDesc from sys.tables a left join sys.extended_properties g on (a.object_id = g.major_id AND g.minor_id = 0)";
try
{
using (SqlConnection connection = new SqlConnection(conStr))
{
list = connection.Query<TableModel>(sql).ToList();
}
}
catch
{```markdown
}
return список;
}
/// <summary>
/// Получает список хранимых процедур в конкретной базе данных
/// </summary>
/// <param name="conStr"></param>
/// <param name="dbName">Имя базы данных</param>
/// <returns></returns>
public List<ProcModel> ПолучитьСписокПроцедур(string conStr, string dbName = "")
{
var список = new List<ProcModel>();
string sql = @" select name as procName, (select text from syscomments where id=OBJECT_ID(name)) as proDetails
from dbo.sysobjects o where OBJECTPROPERTY(id, N'IsProcedure') = 1 order by name";
try
{
using (SqlConnection connection = new SqlConnection(conStr))
{
список = connection.Query<ProcModel>(sql).ToList();
}
}
catch
{
}
}
/// <summary>
/// Получение списка представлений из конкретной базы данных
/// </summary>
/// <param name="conStr">Строка подключения</param>
/// <param name="dbName">Имя базы данных (необязательный параметр)</param>
/// <returns>Список представлений</returns>
public List<ViewModel> ПолучитьСписокПредставлений(string conStr, string dbName = "")
{
var список = new List<ViewModel>();
string sql = @" SELECT name AS viewName, (SELECT text FROM syscomments WHERE id = OBJECT_ID(name)) AS viewDetails
FROM dbo.sysobjects o WHERE OBJECTPROPERTY(id, N'IsView') = 1 ORDER BY name";
try
{
using (SqlConnection connection = new SqlConnection(conStr))
{
список = connection.Query<ViewModel>(sql).ToList();
}
}
catch
{
}
}
``````markdown
}
return список;
}
```csharp
/// <summary>
/// Получение информации о полях таблицы
/// </summary>
/// <param name="tableName"></param>
/// <param name="conStr"></param>
/// <returns></returns>
public List<TableDetail> GetTableDetail(string tableName, string conStr, string dbName = "")
{
var list = new List<TableDetail>();
StringBuilder sb = new StringBuilder();
sb.Append("SELECT [index] = a.colorder, Title = a.name, isMark = CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '1' ELSE '0' END, ");
sb.Append("isPK = CASE WHEN EXISTS(SELECT 1 FROM sysobjects WHERE xtype = 'PK' AND parent_obj = a.id AND name IN(SELECT name FROM sysindexes WHERE indid IN(SELECT indid FROM sysindexkeys WHERE id = a.id AND colid = a.colid))) THEN '1' ELSE '0' END, ");
sb.Append("FieldType = b.name, fieldLength = COLUMNPROPERTY(a.id, a.name, 'PRECISION'), isAllowEmpty = CASE WHEN a.isnullable = 1 THEN '1' ELSE '0' END, defaultValue = ISNULL(e.text, ''), fieldDesc = ISNULL(g.value, '') ");
sb.Append("FROM syscolumns a LEFT JOIN systypes b ON a.xusertype = b.xusertype INNER JOIN sysobjects d ON a.id = d.id AND d xtype = 'U' AND d.name <> 'dtproperties' LEFT JOIN syscomments e ON a.cdefault = e.id ");
sb.Append("LEFT JOIN sys.extended_properties g ON a.id = g.major_id AND a.colid = g.minor_id LEFT JOIN sys.extended_properties f ON d.id = f.major_id AND f.minor_id = 0");
// --Если требуется запросить информацию только для указанной таблицы, добавьте следующее условие where; tableName - имя таблицы, которую нужно запросить; удалите это условие, чтобы запросить информацию обо всех таблицах
sb.Append("WHERE d.name = '" + tableName + "' ORDER BY a.id, a.colorder, d.name");
try
{
using (SqlConnection connection = new SqlConnection(conStr))
{
list = connection.Query<TableDetail>(sb.ToString()).ToList();
}
}
catch
{ }
}
```java
/// <summary>
/// Создание html файла
``` /// </summary>
/// <param name="list">Список таблиц модели</param>
/// <param name="conStr">Строка подключения к базе данных</param>
/// <param name="db">Имя базы данных</param>
/// <param name="type">Тип создания HTML</param>
public void CreateToHtml(List<TableModel> list, string conStr, string db, int type, List<string> checkList)
{
StringBuilder sb = new StringBuilder();
sb.Append("<html><meta charset=\"utf-8\" /><meta http-equiv = \"Content-Language\" content = \"ru-RU\" >");
sb.Append("<head><title>Документация по базе данных</title><body>");
sb.Append("<style type=\"text/css\">\n");
sb.Append("body { font-size: 9pt;}\n");
sb.Append(".styledb { font-size: 14px; }\n");
sb.Append(".styletab {font-size: 14px;padding-top: 15px; }\n</style></head><body>");
sb.Append("<h1 style=\"text-align:center;\">Документация по базе данных " + db + "</h1>");```markdown
GetDBService(type);
Так как данный фрагмент представляет собой вызов функции, он остается без изменений согласно правилам перевода.```markdown #region Создание таблицы if (checkList.Where(m => m.Equals("таблица")).Count() > 0) { sb.Append("
if (tabledetaillist != null && tabledetaillist.Count > 0)
{
foreach (var itm in tabledetaillist)
{
sb.Append("<tr>");
sb.Append("<td>" + itm.index + "</td>");
sb.Append("<td>" + itm.Title + "</td>");
sb.Append("<td>" + itm.isMark + "</td>");
sb.Append("<td>" + itm.isPK + "</td>");
sb.Append("<td>" + itm.FieldType + "</td>");
sb.Append("<td>" + itm.Length + "</td>");
sb.Append("<td>" + itm.AllowNull + "</td>");
sb.Append("<td>" + itm.DefaultValue + "</td>");
sb.Append("<td>" + itm.Note + "</td>");
sb.Append("</tr>");
}
}
sb.Append("</tbody>");
sb.Append("</table>");
}
}
}
```markdown
Append("<td>" + itm.fieldLength + "</td>");
sb.Append("<td>" + itm.isAllowEmpty + "</td>");
sb.Append("<td>" + itm.defaultValue + "</td>");
sb.Append("<td>" + itm.fieldDesc + "</td>");
sb.Append("</tr>");
i++;
}
}
sb.Append("</tbody></table>");
``````markdown
# Создание таблиц
## Создание таблиц
```html
<h4>{{item.tableName}} создание таблицы</h4><br/>
<span>{{service.GetTableSQL(item.tableName, conStr)}}</span>
<h2>2. Хранимые процедуры</h2>
{% if proclist and proclist|length > 0 %}
{% for item in proclist %}
<h3>Название хранимой процедуры: {{item.procName}}</h3>
<span>{{item.proDerails}}</span>
{% endfor %}
{% endif %}
<h2>3. Представления</h2>
{% if viewlist and viewlist|length > 0 %}
{% for item in viewlist %}
<h3>Имя представления: {{item.viewName}}</h3>
<span>{{item.viewDetails}}</span>
{% endfor %}
{% endif %}
### Код программы
```csharp
foreach (var item in viewlist)
{
sb.Append("<h3>Имя представления: " + item.viewName + "</h3>");
sb.Append("<span>" + item.viewDetails + "</span>");
}
sb.ToString();
string filename = db + "-описание базы данных"; // имя файла
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "html";
saveDialog.Filter = "файлы html|*.html";
saveDialog.FileName = filename;
saveDialog.ShowDialog();
filename = saveDialog.FileName;
if (filename.IndexOf(":") < 0) return; // отменено
StreamWriter sw1 = new StreamWriter(saveDialog.FileName, false);
sw1.WriteLine(sb);
sw1.Close();
System.Diagnostics.Process.Start(filename);## 5. Эффект выполнения
Главное окно приложения

Поддержка трёх типов документов: можно выбрать только один, рекомендуется использовать формат Markdown

Эффект создания документа Word

Эффект создания документа HTML

Эффект создания документа в формате Markdown

Резервное копирование базы данных SQL Server

## 6. Адрес открытого проекта
GitHub: <https://github.com/hgmsq/SqlToDocTool>
Gitee: <https://gitee.com/hgm1989/SqlToDocTool>
Gitcode: <https://gitcode.net/xishining/SqlToDocTool>
E-mail: hgmyz@outlook.com
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )