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. Android数据持久化技术 — — —文件存储

    文件保存 package com.example.datastroredtest; import android.app.Activity;import android.os.Bundle;impor ...

  2. JS常用方法记录

    //对Object的num字段进行排序 var compare = function (propertyName) { return function (object1, object2) { var ...

  3. 《C++primer》v5 第6章 函数 读书笔记 习题答案

    6.1 实参是在函数调用处填写的参数.形参是在函数体使用的参数. 实参是形参的初始值. 具体参见:http://blog.163.com/zhengguo_li/blog/static/7030148 ...

  4. 推荐一个Android Studio很实用的插件android-butterknife-zelezny

    当你按钮很多,你又懒得写代码,虽然通过重写onClick比较方便,那么我们能不能连这个switch都省略掉呢? 答案是肯定的,下面这个插件就帮我们解决了这个问题! Android-butterknif ...

  5. 关于spring中无法将service注入到servlet中的问题

    首先,servlet是动态网页项目区别于普通的java项目的,是动态网页项目中web.xml主要配置文件管理的,而spring只能管理普通的pojo,而没办法直接注入,尽管你的注入方式和配置方式都没有 ...

  6. 北大poj- 1045

    Bode Plot Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14060   Accepted: 8820 Descri ...

  7. Math.abs(~2018),掌握规律即可!

    Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...

  8. [Python Fabric] [SSH] Mac OS X 10.9 + Vagrant虚拟环境使用Python Fabric进行SSH远程登录的简单实验

    1. ssh客户端生成key $ Generating public/private rsa key pair. Enter file in which to save the key (/Users ...

  9. CSS3 Background-size

    详情见链接 http://www.w3cplus.com/content/css3-background-size/ 例子:http://www.topcss.org/demo/background- ...

  10. Python中文问题(转)

    在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下: 1. UNICODE (UTF8-16),C854: 2. UTF-8,E59388: 3. GBK,B9FE. 一.python ...