1. 程式人生 > >獲取資料庫表及表結構

獲取資料庫表及表結構

複製程式碼
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.Data.SqlClient;
  5 using System.Linq;
  6 using System.Windows.Forms;
  7 
  8 namespace WindowsTest
  9 {
 10     public partial class CodeCreate : Form
 11     {
 12         private static string S_conStr = "
Data Source=127.0.0.1;Initial Catalog=master;Integrated Security=False;user=sa;password=******;"; 13 14 public CodeCreate() 15 { 16 InitializeComponent(); 17 } 18 19 public static DataTable ExcuteQuery(string connectionString, string cmdText, List<SqlParameter> pars = null
) 20 { 21 using (SqlConnection conn = new SqlConnection(connectionString)) 22 { 23 using (SqlCommand cmd = new SqlCommand(cmdText, conn)) 24 { 25 if (pars != null && pars.Count > 0) cmd.Parameters.AddRange(pars.ToArray());
26 using (SqlDataAdapter adp = new SqlDataAdapter(cmd)) 27 { 28 DataTable dt = new DataTable(); 29 adp.Fill(dt); 30 return dt; 31 } 32 } 33 } 34 } 35 36 private void CodeCreate_Load(object sender, EventArgs e) 37 { 38 #region 獲取所有資料庫的資訊 39 string sql = @" SELECT * 40 FROM master..sysdatabases 41 where dbid>6 42 ORDER BY dbid"; 43 #endregion 44 45 DataTable dt = ExcuteQuery(S_conStr, sql); 46 this.treeView1.Nodes.Add("192.168.30.69"); 47 foreach (DataRow dr in dt.Rows) 48 { 49 this.treeView1.Nodes[0].Nodes.Add(dr["name"].ToString()); 50 } 51 52 this.treeView1.ExpandAll(); 53 } 54 55 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 56 { 57 this.tabControl1.SelectedIndex = 0; 58 59 if (e.Node.Level == 0) return; 60 61 #region 獲取資料庫所有表字段資訊的sql 62 string sql = @" 63 select 64 [表名]=c.Name, 65 [表說明]=isnull(f.[value],''), 66 [列序號]=a.Column_id, 67 [列名]=a.Name, 68 [列說明]=isnull(e.[value],''), 69 [資料庫型別]=b.Name, 70 [型別]= case when b.Name = 'image' then 'byte[]' 71 when b.Name in('image','uniqueidentifier','ntext','varchar','ntext','nchar','nvarchar','text','char') then 'string' 72 when b.Name in('tinyint','smallint','int','bigint') then 'int' 73 when b.Name in('datetime','smalldatetime') then 'DateTime' 74 when b.Name in('float','decimal','numeric','money','real','smallmoney') then 'decimal' 75 when b.Name ='bit' then 'bool' else b.name end , 76 [標識]= case when is_identity=1 then '是' else '' end, 77 [主鍵]= case when exists(select 1 from sys.objects x join sys.indexes y on x.Type=N'PK' and x.Name=y.Name 78 join sysindexkeys z on z.ID=a.Object_id and z.indid=y.index_id and z.Colid=a.Column_id) 79 then '是' else '' end, 80 [位元組數]=case when a.[max_length]=-1 and b.Name!='xml' then 'max/2G' 81 when b.Name='xml' then '2^31-1位元組/2G' 82 else rtrim(a.[max_length]) end, 83 [長度]=case when ColumnProperty(a.object_id,a.Name,'Precision')=-1 then '2^31-1' 84 else rtrim(ColumnProperty(a.object_id,a.Name,'Precision')) end, 85 [小數位]=isnull(ColumnProperty(a.object_id,a.Name,'Scale'),0), 86 [是否為空]=case when a.is_nullable=1 then '是' else '' end, 87 [預設值]=isnull(d.text,'') 88 from 89 sys.columns a 90 left join 91 sys.types b on a.user_type_id=b.user_type_id 92 inner join 93 sys.objects c on a.object_id=c.object_id and c.Type='U' 94 left join 95 syscomments d on a.default_object_id=d.ID 96 left join 97 sys.extended_properties e on e.major_id=c.object_id and e.minor_id=a.Column_id and e.class=1 98 left join 99 sys.extended_properties f on f.major_id=c.object_id and f.minor_id=0 and f.class=1 "; 100 #endregion 101 102 if (e.Node.Level == 1) 103 { 104 DataTable dt = ExcuteQuery(S_conStr.Replace("master", e.Node.Text), sql); 105 this.dataGridView1.DataSource = dt; 106 107 if (dt.Rows.Count > 0) 108 { 109 e.Node.Nodes.Clear(); 110 DataRow[] aryDr = new DataRow[dt.Rows.Count]; 111 dt.Rows.CopyTo(aryDr, 0); 112 List<string> listTableName = aryDr.Select(a => a["表名"].ToString()).Distinct().ToList(); 113 listTableName.ForEach(a => 114 { 115 e.Node.Nodes.Add(a, a); 116 }); 117 e.Node.ExpandAll(); 118 } 119 } 120 121 if (e.Node.Level == 2) 122 { 123 sql += "where [email protected] "; 124 List<SqlParameter> listSqlParameter = new List<SqlParameter>() 125 { 126 new SqlParameter("@TableName",e.Node.Text), 127 }; 128 DataTable dt = ExcuteQuery(S_conStr.Replace("master", e.Node.Parent.Text), sql, listSqlParameter); 129 if (dt.Columns.Count > 0) 130 { 131 if (dt.Rows.Count > 0) 132 { 133 e.Node.Tag = dt.Rows[0]["表說明"].ToString(); 134 } 135 dt.Columns.Remove("表名"); 136 dt.Columns.Remove("表說明"); 137 } 138 this.dataGridView1.DataSource = dt; 139 } 140 } 141 142 private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) 143 { 144 if (this.tabControl1.SelectedTab.Text == "Model") 145 { 146 if (this.treeView1.SelectedNode.Level == 2 && this.dataGridView1.Rows.Count > 0) 147 { 148 string modelTmp = @" 149 using System; 150 151 namespace #ModelNamespace# 152 { 153 /// <summary> 154 /// #ModelClassDescription# 155 /// Create By Tool #CreateDateTime# 156 /// </summary> 157 public class #ModelClassName# 158 { 159 #PropertyInfo# 160 } 161 }"; 162 163 string modelNamespace = "Model"; 164 string modelClassName = this.treeView1.SelectedNode.Text; 165 166 string propertyInfo = string.Empty; 167 foreach (DataGridViewRow dgvr in this.dataGridView1.Rows) 168 { 169 string modelPropertyTmp = @" 170 /// <summary> 171 /// #PropertyDescription# 172 /// </summary> 173 public #PropertyType# #PropertyName# { get; set; }"; 174 175 string propertyDescription = dgvr.Cells["列說明"].Value.ToString().Trim(); 176 string propertyName = dgvr.Cells["列名"].Value.ToString().Trim(); 177 string propertyType = dgvr.Cells["型別"].Value.ToString().Trim(); 178 179 propertyInfo += modelPropertyTmp.Replace(" #PropertyDescription#", propertyDescription) 180 .Replace(" #PropertyType#", propertyType) 181 .Replace("#PropertyName#", propertyName); 182 propertyInfo += Environment.NewLine; 183 } 184 185 modelTmp = modelTmp.Replace("#ModelClassDescription#", this.treeView1.SelectedNode.Tag.ToString()) 186 .Replace("#CreateDateTime#", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) 187 .Replace("#ModelNamespace#", modelNamespace) 188 .Replace("#ModelClassName#", modelClassName) 189 .Replace("#PropertyInfo#", propertyInfo); 190 191 this.richTextBox1.Text = modelTmp; 192 Clipboard.SetDataObject(this.richTextBox1.Text); 193 } 194 } 195 } 196 } 197 } 198 199 主要程式碼
複製程式碼

相關推薦

獲取資料庫結構

1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.SqlClient; 5 using System.Linq; 6 using System.W

mysql獲取資料庫名、列名

mysql select SCHEMA_NAME from information_schema.SCHEMATA //獲取所有的schema 資料庫 SELECT TABLE_NAME from information_schema.`TABLES` wh

python讀取xml資料庫中表內所有資料,獲取資料庫中所有的欄位名稱

工作中需要讀取指定xml資料庫中的資料以及 表所需欄位名,所以在已有例子中改進實現: xml 資料庫 xmldabase.xml: <database> <manifest> <pair key="schema_major_vsn" v

oracle系統結構查詢

查詢表結構和欄位說明資訊 --查詢所有使用者表 表結構及註釋 select t.TABLE_NAME, utc.comments, c.COLUMN_NAME, ucc.comments, c.DATA_TYPE,

Mysql獲取資料庫的所有,以及所有欄位資訊

在許多時候,我們需要獲取資料庫中所有的表,比如常見的程式碼生成,腳手架之類的,通過選擇庫中的表,配置幾個類屬性,自動生成實體類,dao,service等。 下面是mysql獲取資料庫所有表的語句。 select table_name tableName,

Laravel獲取所有的資料庫結構

遇到一個需求,需要修改資料庫中所有包含email的欄位的表,要把裡面的長度改為128位。Laravel獲取所有的表,然後迴圈判斷表裡面有沒有email這個欄位。程式碼如下: use Illuminate\Support\Facades\Schema; us

線性的順序存儲結構元素的獲取,插入刪除

數據結構 線性表 順序存儲結構 對於線性表,我們可以對其元素進行簡單的獲取,插入以及刪除操作。 先來講講元素的獲取操作,完整來講,就是對,將線性表L第i個位置的元素返回,若成功,則返回1,且將第i個位置的元素的值賦給*e;若失敗,則返回0。代碼如下:int GetEl

Sql2012如何將遠端伺服器資料庫結構資料匯入本地資料庫

1、第一步,在本地資料庫中建一個與伺服器同名的資料庫        2、第二步,右鍵源資料庫,任務》匯出資料,彈出匯入匯出提示框,點下一步繼續        3、遠端資料庫操作,確認伺服器名稱(伺服器地址)、身份驗證(輸入使用者名稱、密碼)、選擇需要匯出的源資料庫,點下一步繼續       4、本地目標伺服器

JDBC獲取資料庫資訊

  JDBC中通過MetaData來獲取具體的表的相關資訊。可以查詢資料庫中的有哪些表,表有哪些欄位,欄位的屬性等等。MetaData中通過一系列getXXX函式,將這些資訊存放到ResultSet裡面,然後返回給使用者。關於MetaData的說明網上也有不少,這裡我只是從

java獲取資料庫中表的資訊(包括結構)

1. JDBC連線MYSQL的程式碼很標準,很簡單。 class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager .getConnection("jdbc:mysq

如何獲取SQL Server所有的資料庫名、名、欄位名欄位型別?

解決方案 – 獲取所有資料庫名 select name from master..sysdatabases – 獲取所有表名 select name from YDK..

plsql匯出oracle資料庫結構資料

匯出表結構 1、開啟pl/sql客戶端(匯出資料表結構) 2、在工具頭部選擇tools》export user objects   3、匯出   匯出表資料 1、在plsql頭部選

雲客Drupal8原始碼分析之內容實體資料庫結構對映table mapping

“欄位”概念 在drupal中提到“欄位”這個概念時,請不要理解為資料庫中表的一個列,這不是一個概念,它是指一個欄位物件,充當著實體物件的屬性,也是一個列表型別的型別化資料物件,當本系列提到“欄位field”一般均是指欄位物件或欄位定義物件,而資料庫表中的欄位列,則將其稱為

oracle命令查看結構索引

建表 函數 註意 數據 上下 dex oracle數據庫 str set --查看oracle數據庫的單個表結構 select dbms_metadata.get_ddl(‘TABLE‘,‘TABLE_NAME‘) from dual; 括號裏面有兩個參數,第一個參數是我們

使用JDBC connect獲取數據庫結構信息

localhost rgs inf cal name tor column info 依賴 1、這是生成代碼的關鍵 引入maven依賴 <dependency> <groupId>mysql</groupId&g

通過命令在navicat中創建數據庫結構

雙擊 har not ase 就是 .com 刷新數據 CI 命令 方法/步驟 首先我們雙擊打開【navicat】這款軟件,在菜單欄中選擇【文件】-->【新建連接】-->【MySQL】; 步驟閱讀 在打開的【新建連接】對話框中輸入【

數據結構之鏈實現

oid void scan pan 尋找 最大 執行 連續 邏輯 線性表的鏈式表示和實現 線性表的順序存儲結構的特點是邏輯關系上相鄰的兩個元素在物理位置上也相鄰。正由於這種特點,在做插入和刪除操作時,需移動大量元素。 鏈式存儲:不要求邏輯上相鄰的元素在物理位置上也相鄰,特點

Oracle 12c 插鏈式資料庫下建空間,新建使用者賦權SQL,解決空導不出的問題,使用者鎖定問題,密碼過期問題。

1、連線SQLPLUS sqlplus /nolog 2、SYSDBA登入 conn / as sysdba 3、檢視PDB show pdbs; 4、將會話轉到具體某個DB下 alter session set container=dbname; 5、建立表

在Oracle資料庫中複製結構資料

1. 複製表結構及其資料: create table new_table as select * from old_table 2. 只複製表結構: create table new_tableas select * from old_tablewhere 1=2; 或者:

兩個Oracle資料庫中的結構和資料的複製方法

1. 複製表結構及其資料: create table table_name_new as select * from table_name_old 2. 只複製表結構: create table table_name_new as select * from table_name_old