using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Diagnostics; namespace SyncDatabaseColumnDescription
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
var ssb = new SqlConnectionStringBuilder();
ssb.DataSource = @".\SQL2008";
ssb.UserID = "sa";
ssb.Password = "firstelite";
ssb.InitialCatalog = "OMSDB";
using (var connection = new SqlConnection(ssb.ConnectionString))
{
connection.Open();
var tableList = GetTableList(connection); foreach (var table in tableList)
{ var fieldList = GetFieldList(connection, table);
foreach (var field in fieldList)
{
var desc = GetFieldDescription(connection, table, field);
if (desc != null)
Debug.Print(table + " -> " + field + ":" + desc);
}
}
}
} private void UpdateFieldDescription()
{
var ssb = new SqlConnectionStringBuilder();
ssb.DataSource = @".\SQL2008";
ssb.UserID = "**";
ssb.Password = "****";
ssb.InitialCatalog = "OMSDB_WITH_MEMO";
using (var connection = new SqlConnection(ssb.ConnectionString))
{
connection.Open();
var tableList = GetTableList(connection); ssb.InitialCatalog = "OMSDB";
using (var connection2 = new SqlConnection(ssb.ConnectionString))
{
connection2.Open(); var tableList2 = GetTableList(connection2); foreach (var table in tableList)
{
if (!tableList2.Any(t => t == table))
continue; var fieldList = GetFieldList(connection, table);
var fieldList2 = GetFieldList(connection2, table); foreach (var field in fieldList)
{
if (!fieldList2.Any(f => f == field))
continue; var desc = GetFieldDescription(connection, table, field);
if (string.IsNullOrWhiteSpace(desc))
continue; var desc2 = GetFieldDescription(connection2, table, field);
if (desc2 != null)
UpdateFieldDescription(connection2, table, field, desc);
else
AddFieldDescription(connection2, table, field, desc);
}
} }
}
} private List<string> GetTableList(SqlConnection connection)
{
var tableList = new List<string>();
using (var cmd = new SqlCommand(@"
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_NAME", connection))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
tableList.Add(reader[].ToString());
}
}
}
return tableList;
} private List<string> GetFieldList(SqlConnection connection, string tableName)
{
var fieldList = new List<string>();
using (var cmd = new SqlCommand("SELECT * FROM [" + tableName + "] WHERE 1=2", connection))
{
using (var reader = cmd.ExecuteReader())
{
for (var i = ; i < reader.FieldCount; i++)
fieldList.Add(reader.GetName(i));
}
}
return fieldList;
} private string GetFieldDescription(SqlConnection connection, string tableName, string fieldName)
{
using (var cmd = new SqlCommand(@"SELECT g.[value]
FROM dbo.syscolumns A
INNER JOIN dbo.sysobjects D
ON A.id = D.id
AND D.xtype = 'U'
AND D.name <> 'dtproperties'
INNER JOIN sys.extended_properties G
ON A.id = G.major_id
AND A.colid = G.minor_id
WHERE D.name = '" + tableName + @"'
AND A.name='" + fieldName + @"'", connection))
{
var ret = cmd.ExecuteScalar();
if (ret == null)
return null;
return ret.ToString();
}
} private bool AddFieldDescription(SqlConnection connection, string tableName, string filedName, string description)
{
using (var cmd = new SqlCommand(@"EXECUTE sp_addextendedproperty N'MS_Description', '" + description.Replace("'","''")
+ "', N'user', N'dbo', N'table', N'" + tableName + "', N'column', N'" + filedName + "' ", connection))
{
return cmd.ExecuteNonQuery() > ;
}
} private bool UpdateFieldDescription(SqlConnection connection, string tableName, string filedName, string description)
{
using (var cmd = new SqlCommand(@"EXECUTE sp_updateextendedproperty N'MS_Description', '" + description.Replace("'", "''")
+ "', N'user', N'dbo', N'table', N'" + tableName + "', N'column', N'" + filedName + "' ", connection))
{
return cmd.ExecuteNonQuery() > ;
}
}
}
}

C# 更新SQL Server数据库备注信息从另一数据库的更多相关文章

  1. SQL Server 查询表备注信息的语句

    --name   字段名称--user_type_id --max_length 最大长度--is_nullable 是否允许空--remark  描述SELECT c.name, c.user_ty ...

  2. 解决 U2000 R017 安装报错: 检查SQL server数据库环境变量信息 ( 异常 ) [ 详细信息 ] PATH环境变量中缺少数据库路径的信息

    U2000 R017 安装报错: 检查SQL server数据库环境变量信息 ( 异常 ) [ 详细信息 ] PATH环境变量中缺少数据库路径的信息 管理员模式打开注册表位置: HKEY_LOCAL_ ...

  3. 如何有效抓取SQL Server的BLOCKING信息

    原文:如何有效抓取SQL Server的BLOCKING信息 转自:微软亚太区数据库技术支持组 官方博客 http://blogs.msdn.com/b/apgcdsd/archive/2011/12 ...

  4. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系

    原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...

  5. SQL Server删除表信息的三种方法

    1.使用DELETE实现SQL Server删除表信息 (1)删除表中的全部信息 USE student GO DELETE student      --不加where条件,删除表中的所有记录 go ...

  6. 【转】SQL Server、Oracle、MySQL和Vertica数据库常用函数对比

    SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 1. 绝对值 S:select abs(-1) valu ...

  7. 使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)

    使用SQL Server 2008的事务日志传送功能备份数据库(logshiping) 使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)

  8. 利用SQL Server Management Studio(SSMS)复制数据库

    利用SQL Server Management Studio(SSMS)复制数据库 标签(空格分隔): SQLServer 前言 今天由于客户购买的软件版本确认了,而之前进行开发的本地数据库版本较低, ...

  9. 监控目前所有连接SQL SERVER的用户信息

    原文:监控目前所有连接SQL SERVER的用户信息 if object_id('p_getlinkinfo','P')is not null drop proc p_getlinkinfo go c ...

随机推荐

  1. EL和JSTL专题

    EL简介 EL全名为Expression Language,它原本是JSTL 1.0为方便存取数据所自定义的语言.当时只能在JSTL标签中使用,如下: <c:out value="${ ...

  2. 搭建Android开发环境简要步骤

    (一)安装JDK JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html 在Linux终端输入如下命令,设 ...

  3. adb -s emulator-5554 install JDKCast-PAP.apk

    multi-emulators direct to install app adb -s emulator-5554 install JDKCast-PAP.apk

  4. foreach循环 Java

    第一次遇到foreach循环,是在PHP的数组中,同样,在Java数组中,也遇到了foreach循环,都是用来遍历数组(集合).遍历数组,首先想到的一般都是用while,do while,for循环, ...

  5. 哈希(Hash)与加密(Encrypt)相关内容

    1.哈希(Hash)与加密(Encrypt)的区别 哈希(Hash)是将目标文本转换成具有相同长度的.不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的.可 ...

  6. HttpContext详解

    HttpContext 类:封装有关个别 HTTP 请求的所有 HTTP 特定的信息. 在处理请求执行链的各个阶段中,会有一个对象在各个对象之间进行传递,也即会保存 请求的上下文信息,这个对象就是Ht ...

  7. IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)

    1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...

  8. windows下sublime2 clojure环境配置

    最近在看<七周七并发模型>,其中函数式编程使用的是clojure来做说明,所以也想顺便学习一下clojure这种不同的编程方式语言.那么做开发肯定需要开发环境,第一步先下载clojure官 ...

  9. Java语言概要

    Java把源代码(SourceCode)翻译成字节码(ByteCode):javac MyClass.java,再在Java虚拟机(JVM)上执行字节码:java MyClass. Java是基于面向 ...

  10. Matlab绘图函数一览

    要查看Matlab所有绘图函数,请从Matlab主界面菜单查看“绘图目录”,或从Matlab帮助文档查看“Types of MATLAB Plots”(在线版本).本文的图和英文解释摘自Matlab帮 ...