Commit 26f8a48f authored by tr's avatar tr

1、数据库开发工具:增加对已存在表支持,方便相应导出操作

parent ef527f7e
......@@ -17,3 +17,4 @@ bin
/.vs/Ftt_Common
.vs
/AppHome/save
/AppHome/temp
No preview for this file type
No preview for this file type
......@@ -3,5 +3,8 @@
2、操作说明:支持右键増行/删行,以及按键Insert与Delete
3、导出文件:以表名命名,即每表导出一个相应类型文件。默认导出路径为temp,可自定义。
4、暂存与恢复:暂存时,每表每天只暂存一个文件。暂存路径根目录save文件夹。
5、数据库设置:快速设置数据库链接并记录历史设置。程序启动时读取配置文件的默认数据库链接
6、日志功能:暂不开发
5、数据库设置:快速设置数据库链接并记录历史设置。程序启动时读取配置文件的默认数据库链接。
6、加载表信息:表创建后,可以输入表名,通过该按钮加载相应信息。使用该功能时,有几点需要注意:
a.加载信息后,通过导出SQL按钮,会更新数据库的描述信息,除描述信息之外的任何修改不会更新到数据库。
b.由于类型是下拉选择框,对于非本工具创建的表,存在类型风险,即无法找到匹配的下拉项。
......@@ -12,4 +12,10 @@
<UserId>sa</UserId>
<Pwd>sa</Pwd>
</links>
<links>
<Link>.</Link>
<DbName>Temp</DbName>
<UserId>sa</UserId>
<Pwd>sa</Pwd>
</links>
</DocumentElement>
\ No newline at end of file
......@@ -110,6 +110,16 @@ namespace Tools.Properties {
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 加载 {
get {
object obj = ResourceManager.GetObject("加载", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
......
......@@ -133,6 +133,9 @@
<data name="分析" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\分析.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="加载" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\加载.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="实体类" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\实体类.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
......
......@@ -198,5 +198,8 @@
<ItemGroup>
<None Include="Resources\分析.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\加载.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
This diff is collapsed.
......@@ -123,18 +123,9 @@ namespace Tools.UI
{ "IsAutoIncrement", typeof(bool) },
{ "DefaultValue", typeof(string) },
},
//Rows = {
// { "ID", "主键", "VARCHAR(50)", DBNull.Value, DBNull.Value, DBNull.Value, "" },
//},
});
//设置主键
this._ds.Tables[infoTable].PrimaryKey = new DataColumn[] { this._ds.Tables[infoTable].Columns[0] };
//生成数据结构配置文件
//var cfg = $@"{Utils.ConfigPath}\data_struct_cfg.xml";
//if (!File.Exists(cfg))
//{
// this._ds.WriteXml(cfg, XmlWriteMode.WriteSchema);
//}
#endregion
}
......@@ -159,6 +150,7 @@ namespace Tools.UI
this.tsmiExportSql.Click += TsmiExportSql_Click;
this.tsmiExportExcel.Click += TsmiExportExcel_Click;
this.tsmiExportWord.Click += TsmiExportWord_Click;
this.tsbLoadTable.Click += TsbLoadTable_Click;
this.tsbTempSave.Click += TsbTempSave_Click;
this.tsbResume.Click += TsbResume_Click;
this.tsbDbLink.Click += TsbDbLink_Click;
......@@ -168,6 +160,7 @@ namespace Tools.UI
this.tsmiDelRow.Click += TsmiDelRow_Click;
}
private void BindBaseInfo()
{
this.tbTableName.DataBindings.Clear();
......@@ -289,6 +282,22 @@ namespace Tools.UI
new NPOIWordHelper().Export(this.TableName, this.TableDescription, this._ds.Tables[infoTable], $@"{this.GetExportPath()}\{this.TableName}.docx");
}
private void TsbLoadTable_Click(object sender, EventArgs e)
{
if (this.TableName.Equals(""))
{
Utils.Tip("请输入表名!");
return;
}
if (!this.IsExistTable(this.TableName))
{
Utils.Tip("该表尚未创建!");
return;
}
//初始化表列信息
this.InitTableColumnInfo(this.TableName);
}
private void TsbTempSave_Click(object sender, EventArgs e)
{
if (!this.CheckDetail())
......@@ -332,7 +341,7 @@ namespace Tools.UI
{
using (var sr = new StreamReader(helpFileName))
{
Utils.Tip(sr.ReadToEnd(), 450, 300);
Utils.Tip(sr.ReadToEnd(), 700, 300);
}
}
......@@ -363,12 +372,13 @@ namespace Tools.UI
/// <returns></returns>
private bool CheckDetail()
{
//检查基本信息
//检查表名
if (this.TableName.Equals(""))
{
Utils.Tip("请输入表名!");
return false;
}
//检查表描述
if (this.TableDescription.Equals(""))
{
Utils.Tip("请输入表的描述信息!");
......@@ -473,12 +483,82 @@ namespace Tools.UI
Directory.CreateDirectory(path);
}
}
/// <summary>
/// 是否存在表
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
private bool IsExistTable(string tableName)
{
return this._db.IsExist(this._link, $"SELECT COUNT(*) FROM sys.tables WHERE [name] = '{tableName}'");
}
/// <summary>
/// 初始化表列信息(针对已存在的表)
/// </summary>
/// <param name="tableName"></param>
private void InitTableColumnInfo(string tableName)
{
//清空当前表格
this._ds.Tables[infoTable].Rows.Clear();
var sqlist = new List<TQuery> {
//取表结构
new TQuery(tableName, $"SELECT TOP 0 * FROM {tableName}"),
//取表描述
new TQuery("TableDescInfo", $@"
SELECT
TableName=a.name,
TableDescription=b.value
FROM sysobjects a
LEFT JOIN sys.extended_properties b ON a.id = b.major_id AND b.minor_id = 0
WHERE a.name = '{tableName}'"),
//取列描述、非空、默认值
new TQuery("ColumnDescInfo", $@"
SELECT
FieldName = CONVERT(VARCHAR(100), a.name),
[Description] = CONVERT(VARCHAR (50), isnull(d.[value],'')),
IsNotNull = CASE WHEN a.isnullable=1 THEN 0 ELSE 1 END,
DefaultValue = REPLACE(REPLACE(c.text, '(', ''), ')', ''),
ColumnType = CASE WHEN CHARINDEX('varchar',e.name,0) > 0 THEN e.name+'('+CAST(a.length AS VARCHAR(50)) +')' ELSE e.name END
FROM dbo.syscolumns a
INNER JOIN dbo.sysobjects b ON b.id = a.id AND b.xtype = 'U' AND b.name <> 'dtproperties'
LEFT JOIN sys.syscomments c ON c.id = a.cdefault
LEFT JOIN sys.extended_properties d ON d.major_id = b.id AND d.minor_id = a.colid
LEFT JOIN dbo.systypes e ON e.xusertype = a.xusertype
WHERE b.name = '{tableName}'"),
};
try
{
var ds = this._db.GetData(this._link, sqlist, true);
//先添加表描述
this.tbTableDescription.Text = ds.Tables["TableDescInfo"].DefaultView[0]["TableDescription"].ToString();
//初始化列信息
foreach (DataColumn dc in ds.Tables[tableName].Columns)
{
var drNew = this._ds.Tables[infoTable].NewRow();
var rows = ds.Tables["ColumnDescInfo"].Select($"FieldName='{dc.ColumnName}'");
drNew["FieldName"] = dc.ColumnName;
drNew["Description"] = rows[0]["Description"];
drNew["ColumnType"] = rows[0]["ColumnType"].ToString().ToUpper();
drNew["IsNotNull"] = rows[0]["IsNotNull"];
drNew["IsPrimaryKey"] = ds.Tables[tableName].PrimaryKey.Contains(dc);
drNew["IsAutoIncrement"] = dc.AutoIncrement;
drNew["DefaultValue"] = rows[0]["DefaultValue"];
drNew.EndEdit();
this._ds.Tables[infoTable].Rows.Add(drNew);
}
}
catch (Exception ex)
{
Utils.Tip("初始化列信息出错!\r\n" + ex.Message);
}
}
#region 待开发:查询指定表的列与描述信息
private void SearchColumn(string tableName)
private void SearchColumn(string tableName)
{
string sql = $@"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment