sql自动批量产生数据小工具的主页面源码

来源:互联网 发布:华为算法工程师笔试 编辑:程序博客网 时间:2024/04/28 00:42
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 JonseTool;using System.IO;using System.Collections;using System.Data.SqlClient;namespace AutoData{    public partial class frmMain : Form    {        //private static int iClickHighlightCount = -1;        public frmMain()        {            InitializeComponent();        }        private void frmMain_Load(object sender, EventArgs e)        {            this.Cursor = Cursors.WaitCursor;            InitForm();            this.Cursor = Cursors.Default;        }         private void InitForm()        {            rgMode.SelectedIndex = 0; // 设置默认选中 windows模式            txtPassword.Enabled = false;            txtUserName.Enabled = false;            ArrayList _arrFile = null;            ReadTxtFile(out _arrFile);            if (_arrFile != null && _arrFile.Count > 0)            {                Common.SetComboList(cboServer, null, _arrFile, null, "", false, true);            }        }        private void ReadTxtFile(out ArrayList arrFile)        {            arrFile = new ArrayList();            try            {                //string sFileFullName = System.Windows.Forms.Application.StartupPath + @"/Resources/TimeLog";                string sFileFullName = System.Windows.Forms.Application.StartupPath.Replace(@"bin\Debug","") + @"/Data";                if (!System.IO.Directory.Exists(sFileFullName))                {                    System.IO.Directory.CreateDirectory(sFileFullName);                }                sFileFullName += @"/ServerName.txt";                if (!System.IO.File.Exists(sFileFullName))                {                    //System.IO.File.CreateText(sFileName);                    FileStream fs;                    fs = File.Create(sFileFullName);                    fs.Close();                }                FileStream fsTxtFile = new FileStream(sFileFullName, FileMode.Open, FileAccess.Read);                StreamReader sr = new StreamReader(fsTxtFile, System.Text.Encoding.Default);                string sTemp;                sTemp = sr.ReadLine();                while (sTemp != null)                {                    if (sTemp != "")                    {                        arrFile.Add(sTemp);                        sTemp = sr.ReadLine();                    }                }                sr.Close();                sr.Dispose();                fsTxtFile.Dispose();            }            catch (Exception ex)            {                Common.DisplayMsg(this.Text, ex.Message.ToString());            }        }        private void CheckLogin()        {            bool bCheck = Common.CheckEssentialInput(cboServer, "服务器名称", this.Text);            if (!bCheck) return;            if (rgMode.SelectedIndex == 1)            {                bCheck = Common.CheckEssentialInput(txtUserName, "登录名", this.Text);                if (!bCheck) return;                bCheck = Common.CheckEssentialInput(txtPassword, "密码", this.Text);                if (!bCheck) return;            }            if (GetAllDataBase() != null)            {                Common.SetComboList(cboDBName, null, GetAllDataBase(), null, "");                AddServerNameToTxt(System.Windows.Forms.Application.StartupPath.Replace(@"bin\Debug", "") + "/Data/ServerName.txt", cboServer.Text);                //Common.DisplayMsg(this.Text, "数据连接成功");                lblDBCount.Text = cboDBName.Properties.Items.Count.ToString();            }            else            {                //Common.DisplayMsg(this.Text, "数据连接失败");                cboDBName.Properties.Items.Clear();                cboTableName.Properties.Items.Clear();                cboDBName.Text = string.Empty;                cboTableName.Text = string.Empty;                txtUserName.Focus();            }        }        private void AddServerNameToTxt(string sFileFullName, string sNewItem)        {            ArrayList arrFile = new ArrayList();            try            {                FileStream fsTxtFile = new FileStream(sFileFullName, FileMode.Open, FileAccess.Read);                StreamReader sr = new StreamReader(fsTxtFile, System.Text.Encoding.Default);                string sTemp;                sTemp = sr.ReadLine();                while (sTemp != null)                {                    if (sTemp != "")                    {                        arrFile.Add(sTemp);                        sTemp = sr.ReadLine();                    }                }                sr.Close();                sr.Dispose();                fsTxtFile.Dispose();                FileStream fsTxtWrite = new FileStream(sFileFullName, FileMode.Append, FileAccess.Write);                StreamWriter srWrite = new StreamWriter(fsTxtWrite, System.Text.Encoding.Default);                if (arrFile != null && arrFile.Count > 0)                {                    if (!arrFile.Contains(sNewItem))                        srWrite.WriteLine(sNewItem);                }                else                {                    srWrite.WriteLine(sNewItem);                }                srWrite.Close();                srWrite.Dispose();                fsTxtWrite.Dispose();            }            catch (Exception ex)            {                Common.DisplayMsg(this.Text, ex.Message.ToString());            }        }        /// <summary>        /// 取所有数据库名,添加到lvDB        /// </summary>        /// <returns></returns>        private ArrayList GetAllDataBase()        {            ArrayList DBNameList = null;            try            {                DBNameList = new ArrayList();                SqlConnection Connection = null;                if (rgMode.SelectedIndex == 1)                {                    Connection =                        new SqlConnection(String.Format(@"Data Source={0};Initial Catalog=master;User ID={1};PWD={2}", @cboServer.Text, txtUserName.Text.Trim(), txtPassword.Text.Trim()));                }                else                {                    Connection = new SqlConnection(String.Format(@"Initial Catalog=master;Data Source={0};Integrated Security=SSPI",@cboServer.Text));                }                //new SqlConnection(String.Format("Data Source={0};Initial Catalog=master;User ID={1};PWD={2}", @"IT_JONSE-PC\JONSE", "sa", "aaaaaa"));                DataTable DBNameTable = new DataTable();                SqlDataAdapter Adapter = new SqlDataAdapter("select name from master..sysdatabases order by name", Connection);                lock (Adapter)                {                    Adapter.Fill(DBNameTable);                }                foreach (DataRow row in DBNameTable.Rows)                {                    DBNameList.Add(row["name"]);                }            }            catch (Exception ex)            {                Common.DisplayMsg(this.Text, ex.Message.Replace("。", "\r\n")); // 将报错信息中的句号置换成换行键                DBNameList = null;            }            return DBNameList;        }        private void cboDBName_MouseClick(object sender, MouseEventArgs e)        {            this.Cursor = Cursors.WaitCursor;            CheckLogin();            this.Cursor = Cursors.Default;        }        private void cboDBName_SelectedValueChanged(object sender, EventArgs e)        {            bool bResult = Common.CheckEssentialInput(cboDBName, "数据库名", this.Text);            if (!bResult) return;            this.Cursor = Cursors.WaitCursor;            //@"password={0};uid={1};database={2};server={3}"            //Common.ConnString = string.Format(@"Password={0};User ID={1};Initial Catalog={2};Data Source={3}", txtPassword.Text, txtLoginName.Text, cboDBName.Text, cboServer.Text);            if (rgMode.SelectedIndex == 1)            {                SqlHelper.ConnString = string.Format(@"password={0};uid={1};database={2};server={3}", txtPassword.Text, txtUserName.Text.Trim(), cboDBName.Text.Trim(), cboServer.Text);            }            else            {                SqlHelper.ConnString = string.Format(@"Initial Catalog={0};Data Source={1};Integrated Security=SSPI",cboDBName.Text.Trim(),cboServer.Text.Trim());            }            cboTableName.Properties.Items.Clear();            cboTableName.Text = "";            grdMain.DataSource = null;            string sSql = "use [" + cboDBName.Text + "] select name from sys.Objects where type='U' OR type='V' order by name";            Common.SetComboList(cboTableName, sSql);            lblTblCount.Text = cboTableName.Properties.Items.Count.ToString();            this.Cursor = Cursors.Default;        }        private void cboTableName_SelectedValueChanged(object sender, EventArgs e)        {            bool bResult = Common.CheckEssentialInput(cboTableName, "表名", this.Text);            if (!bResult) return;            this.Cursor = Cursors.WaitCursor;            InitColumnsInfo(cboTableName.Text);            GetColumnsSql(cboTableName.Text);            btnExec.Enabled = true;            this.Cursor = Cursors.Default;        }        private string GetAutoSql(string sTableName, int iType = 0)        {            #region ##这里不能缩进            string sSql =string.Empty;            if(iType==0) // 得到所有的列,查询            {            sSql=@"declare @sTableName varchar(100)    set @sTableName='" + sTableName + @"'declare @sFieldName varchar(4000)    set  @sFieldName=''declare @sSql varchar(max)    set @sSql=''select  @sFieldName += '    ,[' + name + ']' from syscolumns where id=(select id from sysobjects where id=object_id(@sTableName))if(LEN(@sFieldName)>1)beginset @sFieldName=substring(@sFieldName,8,LEN(@sFieldName)-2)endselect @sSql='select top 1000    ' +  @sFieldName + 'from [' + @sTableName + ']'select @sSql--PRINT sSql";               }            else if(iType==1) // insert            {            sSql=@"declare @sTableName varchar(100)      set @sTableName='" + sTableName + @"'declare @sFieldName varchar(4000)    set  @sFieldName=''declare @sFieldName2 varchar(4000)     set @sFieldName2=''declare @sSql varchar(max)    set @sSql=''select  @sFieldName += '    ,[' + name + ']' ,@sFieldName2 += '    ,@' + name + ''     from syscolumns where id=(select id from sysobjects where id=object_id(@sTableName))if(LEN(@sFieldName)>1)beginset @sFieldName=substring(@sFieldName,8,LEN(@sFieldName)-2)endif(LEN(@sFieldName2)>1)beginset @sFieldName2=substring(@sFieldName2,8,LEN(@sFieldName2)-2)endselect @sSql='insert into ' + @sTableName + '(' + '    ' +  @sFieldName + ')' + 'select ' + @sFieldName2select @sSql--PRINT sSql";            }            else if (iType == 2) // update            {                sSql = @"declare @sTableName varchar(100)    set @sTableName='" + sTableName + @"'declare @sFieldName varchar(4000)     set  @sFieldName=''declare @sSql varchar(max)    set @sSql=''select  @sFieldName += '    ,[' + name + ']=' + ' @' + name from syscolumns where id=(select id from sysobjects where id=object_id(@sTableName))if(LEN(@sFieldName)>1)beginset @sFieldName=substring(@sFieldName,8,LEN(@sFieldName)-2)endselect @sSql='update ' + @sTableName + ' set    ' +  @sFieldName + 'where @condition'select @sSql--PRINT sSql";            }            #endregion            return sSql;        }        // 得到sql        private void GetColumnsSql(string sTableName,int iType=0)        {            string sSql = GetAutoSql(sTableName, iType);            try            {                DataTable dt = SqlHelper.ExecuteDataTable(SqlHelper.ConnString, CommandType.Text, sSql);                if (dt != null && dt.Rows.Count > 0)                {                    richTxtSql.Text = dt.Rows[0][0].ToString();                }            }            catch (Exception ex)            {                Common.DisplayMsg(this.Text, ex.Message);            }        }        private void InitColumnsInfo(string sTableName)        {            StringBuilder sb = new StringBuilder();            // ////英文            //sb.AppendLine("SELECT");            //sb.AppendLine("     C.name as FieldName,T.name as TypeName");            //sb.AppendLine("     ,C.IsNullable  ");            //sb.AppendLine("     ,case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=c.id and name in (");            //sb.AppendLine("         SELECT name FROM sysindexes WHERE indid in(");            //sb.AppendLine("             SELECT indid FROM sysindexkeys WHERE id = c.id AND colid=c.colid))) then 1 else 0 end ");            //sb.AppendLine("                 as IsPrimary");            //sb.AppendLine("     ,COLUMNPROPERTY(c.id,c.name,'IsIdentity') as IsIdentity");            //sb.AppendLine("     ,C.Length as ByteLength ");            //sb.AppendLine("     ,COLUMNPROPERTY(C.id,C.name,'PRECISION') as StringLength");            //sb.AppendLine("     ,isnull(COLUMNPROPERTY(c.id,c.name,'Scale'),0) as DotPrecision");            //sb.AppendLine("     ,ISNULL(CM.text,'') as DefaultValue");            //sb.AppendLine("     ,isnull(ETP.value,'') AS [Description]");            //sb.AppendLine("     --,ROW_NUMBER() OVER (ORDER BY C.name) AS [Row]");            //sb.AppendLine("FROM syscolumns C");            //sb.AppendLine("INNER JOIN systypes T ON C.xusertype = T.xusertype ");            //sb.AppendLine("left JOIN sys.extended_properties ETP   ON  ETP.major_id = c.id AND ETP.minor_id = C.colid AND ETP.name ='MS_Description' ");            //sb.AppendLine("left join syscomments CM on C.cdefault=CM.id");            //sb.AppendLine("WHERE C.id = object_id('" + sTableName + "')");            // 中文            sb.AppendLine("SELECT");            sb.AppendLine("     C.name as [字段名],T.name as [字段类型]");            sb.AppendLine("     ,convert(bit,C.IsNullable)  as [可否为空]");            sb.AppendLine("     ,convert(bit,case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=c.id and name in (");            sb.AppendLine("         SELECT name FROM sysindexes WHERE indid in(");            sb.AppendLine("             SELECT indid FROM sysindexkeys WHERE id = c.id AND colid=c.colid))) then 1 else 0 end) ");            sb.AppendLine("                 as [是否主键]");            sb.AppendLine("     ,convert(bit,COLUMNPROPERTY(c.id,c.name,'IsIdentity')) as [自动增长]");            sb.AppendLine("     ,C.Length as [占用字节] ");            sb.AppendLine("     ,COLUMNPROPERTY(C.id,C.name,'PRECISION') as [长度]");            sb.AppendLine("     ,isnull(COLUMNPROPERTY(c.id,c.name,'Scale'),0) as [小数位数]");            sb.AppendLine("     ,ISNULL(CM.text,'') as [默认值]");            sb.AppendLine("     ,isnull(ETP.value,'') AS [字段描述]");            sb.AppendLine("     --,ROW_NUMBER() OVER (ORDER BY C.name) AS [Row]");            sb.AppendLine("FROM syscolumns C");            sb.AppendLine("INNER JOIN systypes T ON C.xusertype = T.xusertype ");            sb.AppendLine("left JOIN sys.extended_properties ETP   ON  ETP.major_id = c.id AND ETP.minor_id = C.colid AND ETP.name ='MS_Description' ");            sb.AppendLine("left join syscomments CM on C.cdefault=CM.id");            sb.AppendLine("WHERE C.id = object_id('" + sTableName + "')");            try            {                ClearGridDataSource();                chkSql.Checked = false;                DateTime dtStart = DateTime.Now;                DataTable dt = SqlHelper.ExecuteDataTable(SqlHelper.ConnString, CommandType.Text, sb.ToString());                DateTime dtEnd = DateTime.Now;                TimeSpan timeSpan = dtEnd.Subtract(dtStart);//时间间隔 天时分秒                grdMain.DataSource = dt;                FixedColumns();                 SetAutoColumns();                if (dt != null && dt.Rows.Count >= 0)                {                    moeError.Text = "影响记录: " + dt.Rows.Count + "\t运行时间: " + timeSpan.ToString();                }            }            catch (Exception ex)            {                Common.DisplayMsg(this.Text, ex.Message.ToString());            }        }        private void SetAutoColumns()        {            this.Cursor = Cursors.WaitCursor;            grvMain.OptionsView.ColumnAutoWidth = false;            grvMain.BestFitColumns();            this.Cursor = Cursors.Default;        }        private void FixedColumns()        {            try            {                if (grvMain.Columns.Count >= 2)                {                    if (grvMain.GetRowCellValue(0, grvMain.Columns[1]) != null)                    {                        if (grvMain.GetRowCellValue(0, grvMain.Columns[1]).ToString().Length >= 30)                        {                            return;                        }                    } return;                }                if (grvMain.Columns.Count >= 6)                {                    for (int i = 0; i <= 3; i++)                    {                        grvMain.Columns[i].Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left;                    }                }            }            catch (Exception ex)            {                Common.DisplayMsg(this.Text, ex.Message);            }        }        private void ClearGridDataSource()        {            grvMain.Columns.Clear();            grdMain.DataSource = null;            grdMain.DataBindings.Clear();            moeError.Text = string.Empty;        }        private void btnExport_Click(object sender, EventArgs e)        {            if (grvMain.RowCount == 0) return;            this.Cursor = Cursors.WaitCursor;            Common.ExportToExcel(this.grdMain, cboTableName.Text + "表相关信息");            this.Cursor = Cursors.Default;        }        private string GetSql()        {            string sSql = string.Empty;            if (richTxtSql.SelectedText != "")                sSql = richTxtSql.SelectedText;            else                sSql = richTxtSql.Text.Trim();            if (sSql == "") return "";            //sSql.Contains(Convert.ToChar(Keys.Return).ToString()) ||             if (sSql.Contains(Convert.ToChar("\n").ToString()))            {                string sTemp = string.Empty;                string[] aSql = sSql.Split(Convert.ToChar("\n"));                for (int i = 0; i < aSql.Length; i++)                {                    if (aSql[i].Trim().StartsWith("--")) continue;                    sTemp += aSql[i];                }                sSql = sTemp;            }            return sSql.ToLower();        }        private void btnExec_Click(object sender, EventArgs e)        {            string sSql = GetSql();            if (string.IsNullOrEmpty(sSql))            {                moeError.Text = "不存在可运行的sql语句";                return;            }            if (string.IsNullOrEmpty(cboDBName.Text))            {                Common.DisplayMsg(this.Text, "请先选择数据库");                cboDBName.Focus();                return;            }            this.Cursor = Cursors.WaitCursor;            grdMain.Visible = true;            btnExec.Enabled = false;            try            {                ClearGridDataSource();                if (sSql.StartsWith("select"))                {                    DateTime dtStart = DateTime.Now;                    DataTable dt = SqlHelper.ExecuteDataTable(SqlHelper.ConnString, CommandType.Text, sSql);                    DateTime dtEnd = DateTime.Now;                    TimeSpan timeSpan = dtEnd.Subtract(dtStart);//时间间隔 天时分秒                    grdMain.DataSource = dt;                    FixedColumns();                    SetAutoColumns();                    if (dt != null && dt.Rows.Count >= 0)                    {                        moeError.Text = "影响记录: " + dt.Rows.Count + "\t运行时间: " + timeSpan.ToString();                    }                }                else if (sSql.StartsWith("update") || sSql.StartsWith("insert") || sSql.StartsWith("delete"))                {                    DateTime dtStart = DateTime.Now;                    int iResult = SqlHelper.ExecuteNonQuery(SqlHelper.ConnString, CommandType.Text, sSql);                    DateTime dtEnd = DateTime.Now;                    TimeSpan timeSpan = dtEnd.Subtract(dtStart);//时间间隔 天时分秒                    moeError.Text = "影响记录: " + iResult + "\t运行时间: " + timeSpan.ToString();                }                else                {                    DateTime dtStart = DateTime.Now;                    DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.ConnString, CommandType.Text, sSql);                    DateTime dtEnd = DateTime.Now;                    TimeSpan timeSpan = dtEnd.Subtract(dtStart);//时间间隔 天时分秒                    if (ds.Tables.Count == 1)                    {                        //grdMain.Dock = DockStyle.Fill;                        grdMain.DataSource = ds.Tables[0];                        FixedColumns();                        SetAutoColumns();                        if (ds.Tables[0] != null && ds.Tables[0].Rows.Count >= 0)                        {                            moeError.Text = "影响记录: " + ds.Tables[0].Rows.Count + "\t运行时间: " + timeSpan.ToString();                        }                    }                    else if (ds.Tables.Count > 1)                    {                        ////grdMain.DataSource = ds.Tables[0];                        ////FixedColumns();                        ////SetAutoColumns();                        //spcGrid.Panel2.Controls.Clear();                        //grdMain.DataSource = null;                        ////grdMain.Anchor = AnchorStyles.None;                        //grdMain.Dock = DockStyle.None;                        //grdMain.Visible = false;                        //grdMain.Dispose();                        //DevExpress.XtraGrid.GridControl gc = null;                        int iTotalTableRows = 0;                        for (int i = 0; i < ds.Tables.Count; i++)                        {                        //    gc = new DevExpress.XtraGrid.GridControl();                        //    gc.Name = "gc" + i.ToString();                        //    gc.DataSource = ds.Tables[i];                        //    //gc.Location = new Point(0, pcGrid.Height - pcGrid.Height / ds.Tables.Count * (ds.Tables.Count - i));                        //    gc.Height = spcGrid.Panel2.Height / ds.Tables.Count;                        //    gc.Top = spcGrid.Panel2.Height - spcGrid.Panel2.Height / ds.Tables.Count * (ds.Tables.Count - i);                        //    //foreach (object c in gc.Controls)                        //    //{                        //    //    if (c is DevExpress.XtraGrid.Views.Grid.GridView)                        //    //    {                        //    //        DevExpress.XtraGrid.Views.Grid.GridView gv = c as DevExpress.XtraGrid.Views.Grid.GridView;                        //    //        gv.OptionsView.ShowGroupPanel = false;                        //    //    }                        //    //}                        //    //foreach (object c in gc.Views)                        //    //{                        //    //    if (c is DevExpress.XtraGrid.Views.Grid.GridView)                        //    //    {                        //    //        DevExpress.XtraGrid.Views.Grid.GridView gv = c as DevExpress.XtraGrid.Views.Grid.GridView;                        //    //        gv.OptionsView.ShowGroupPanel = false;                        //    //    }                        //    //}                        //    spcGrid.Panel2.Controls.Add(gc);                        iTotalTableRows += ds.Tables[i].Rows.Count;                        }                        grdMain.DataSource = ds.Tables[0];                        moeError.Text = "得到记录: " + iTotalTableRows + "行\t得到表: " + ds.Tables.Count + "张\t这里暂时只显示第一张表的内容\t运行时间: " + timeSpan.ToString();                    }                }            }            catch (Exception ex)            {                moeError.Focus();                moeError.Text = "运行错误: " + ex.Message.ToString();                //Common.DisplayMsg(this.Text, ex.Message.ToString());            }            btnExec.Enabled = true;            this.Cursor = Cursors.Default;        }        private void chkSql_CheckedChanged(object sender, EventArgs e)        {            if (!string.IsNullOrEmpty(cboTableName.Text))            {                if (chkSql.Checked)                {                    richTxtSql.Text = "select top 1000 * from [" + Common.ReplaceSQL(cboTableName.Text) + "]";                }            }        }        private void chkColumn_CheckedChanged(object sender, EventArgs e)        {            this.Cursor = Cursors.WaitCursor;            if (chkColumn.Checked)            {                cboTableName_SelectedValueChanged(sender, e);            }            this.Cursor = Cursors.Default;        }        private void btnSetData_Click(object sender, EventArgs e)        {            this.Cursor = Cursors.WaitCursor;            btnSetData.Enabled = false;            try            {                SetData();            }            catch (Exception ex)            {                Common.DisplayMsg(this.Text, ex.Message);            }            btnSetData.Enabled = true;            this.Cursor = Cursors.Default;        }        private void SetData()        {            bool bResult = Common.CheckEssentialInput(cboAutoData, "数据级别", this.Text);            if (!bResult) return;            if (Common.ConfirmMsg(this.Text, "你确定要开始造数据: " + cboAutoData.Text + " 吗?") != DialogResult.Yes) return;            chkColumn.Checked = true; // 这个是必要条件。后面的动作都要以这个选定表的相关列的属性为基础            int iFieldCount = grvMain.RowCount;            int iPropertyCount = grvMain.Columns.Count;            string[,] sDBField = new string[iFieldCount, iPropertyCount];            DataTable dt = new DataTable();            for (int i = 0; i < iFieldCount; i++)            {                for (int j = 0; j < iPropertyCount; j++)                {                    object oValue = grvMain.GetRowCellValue(i, grvMain.Columns[j]);                    sDBField[i, j] = Common.IsNullOrEmptyObject(oValue) ? "" : oValue.ToString();                }                dt.Columns.Add(sDBField[i, 0]);            }            // 生成数据            GetFileData(dt,sDBField);            //// 从datatable导入到数据库            if (TransferData2DB(dt))            {                Common.DisplayMsg(this.Text, "数据完成");            }        }        private bool TransferData2DB(DataTable dt)        {            bool bResult = false;            SqlConnection conn = new SqlConnection(SqlHelper.ConnString);            conn.Open();            SqlTransaction tran = conn.BeginTransaction();             SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, tran);//创建SqlBulkCopy对象                            try            {                 sqlBulkCopy.DestinationTableName = cboTableName.Text;//目标数据库表名                sqlBulkCopy.ColumnMappings.Clear();                for (int j = 0; j < dt.Columns.Count; j++)                {                    sqlBulkCopy.ColumnMappings.Add((string)dt.Columns[j].ColumnName, (string)dt.Columns[j].ColumnName);//匹配列名                }                sqlBulkCopy.WriteToServer(dt);//将源表中的数据写入数据库中目标表中                 tran.Commit();                bResult = true;            }            catch (Exception ex)            {                tran.Rollback();                Common.DisplayMsg(this.Text, ex.Message);                bResult= false;            }            finally            {                sqlBulkCopy.Close();                GC.Collect();            }            return bResult;        }        private void GetFileData(DataTable dt,string[,] _DBField)        {            int iDataCount = Convert.ToInt32(cboAutoData.Text.Split('[')[0].ToString()); // 生成数据 的数目            int iFieldCount = grvMain.RowCount;            int iPropertyCount = grvMain.Columns.Count;            DataRow dr = null;            Random rm = new Random();            for (int i = 0; i < iDataCount; i++)            {                GetAllFieldData(out dr,dt,_DBField, iDataCount, iFieldCount, rm);                //Common.WriteData(sData);                dt.Rows.Add(dr);            }        }        private void GetAllFieldData(out DataRow dr, DataTable dt, string[,] _DBField, int iDataCount, int iFieldCount, Random rm)        {            dr = dt.NewRow();            //string sData = string.Empty;            object sTemp = System.DBNull.Value;            for (int i = 0; i < iFieldCount; i++) // sDBField.GetUpperBound(0) + 1            {                if (_DBField[i, 1] == Common.DBFieldType.Int.ToString().ToLower()) // 字段类型                {                    int iTemp = rm.Next(1, 2147483647);// int 型                    sTemp = iTemp.ToString();                }                else if (_DBField[i, 1] == Common.DBFieldType.SmallInt.ToString().ToLower())                {                    int iTemp = rm.Next(1, 32767);                    sTemp = iTemp.ToString();                }                else if (_DBField[i, 1] == Common.DBFieldType.TinyInt.ToString().ToLower())                {                    int iTemp = rm.Next(1, 255);                    sTemp = iTemp.ToString();                }                else if (_DBField[i, 1] == Common.DBFieldType.BigInt.ToString().ToLower())                {                    int iTemp = rm.Next(1, 2147483647);// bigint 型      9223372036854775807                    sTemp = iTemp.ToString();                }                else if (_DBField[i, 1] == Common.DBFieldType.Bit.ToString().ToLower())                {                    int iTemp = rm.Next(0, 2);                    sTemp = iTemp.ToString();                }                else if (_DBField[i, 1] == Common.DBFieldType.Varchar.ToString().ToLower()  || _DBField[i, 1] == Common.DBFieldType.NVarchar.ToString().ToLower())                {                    if (_DBField[i, 0].Contains("date"))                    {                        sTemp = GetDateTimeData(rm);                    }else                    {                        sTemp = GetVarcharData(rm, Convert.ToInt32(_DBField[i,6]));                    }                }                else if (_DBField[i, 1] == Common.DBFieldType.Decimal.ToString().ToLower() || _DBField[i, 1] == Common.DBFieldType.Numeric.ToString().ToLower())                {                    int iTemp = rm.Next(0, 2000);                    double dTemp = rm.NextDouble();                    sTemp = (dTemp + iTemp).ToString();                }               // else if (_DBField[i, 1] == Common.DBFieldType.DateTime.ToString().ToLower() || _DBField[i, 1] == Common.DBFieldType.SmallDateTime.ToString().ToLower() )                else if (_DBField[i, 1].Contains("date"))                {                    sTemp = GetDateTimeData(rm);                }                dr[i] = sTemp;            }        }        private string GetDateTimeData(Random rm)        {            DateTime dt = new DateTime();            int type = rm.Next(1, 5);            if (type == 1)            {                dt = DateTime.Now.AddDays(rm.Next(-7, 8));            }            else if (type == 2)            {                dt = DateTime.Now.AddMonths(rm.Next(-1, 2));            }            else if (type == 3)            {                dt = DateTime.Now.AddMonths(rm.Next(-4, 5));            }            else if (type == 4)            {                dt = DateTime.Now.AddYears(rm.Next(-1, 2));            }            return dt.ToString("yyyy-MM-dd");        }        private string GetVarcharData(Random rm, int iLength)        {            StringBuilder sb = new StringBuilder();            if (iLength < 0) iLength = 8000;            //string[] sSample = { "abcdefghijklmnopqrstuvwxyz", "0123456789", "一地在要工上是中国同和的有人我主产不为这民了发以经" };            //int i = rm.Next(0, 3);            //int iCharCount = rm.Next(1, 200);            //for (int j = iCharCount - 1; j >= 0; j--)            //{            //    int iIndex = 0;            //    if (i == 0)            //    {            //        iIndex = (j + rm.Next(0, 100)) % 26;            //    }            //    else if (i == 1)            //    {            //        iIndex = (j + rm.Next(0, 100)) % 10;            //    }            //    else if (i == 2)            //    {            //        iIndex = (j + rm.Next(0, 100)) % 25;            //    }            //    sb.Append(sSample[i].Substring(iIndex, 1));            //    if (sb.ToString().Length % 10 == 0)            //    {            //        sb.Append(" ");            //    }            //}            string[] sSample = { "abcdefghijklmnopqrstuvwxyz", "0123456789"};            int i = rm.Next(0, 2);            int iCharCount = rm.Next(1, 200);            for (int j = iCharCount - 1; j >= 0; j--)            {                int iIndex = 0;                if (i == 0)                {                    iIndex = (j + rm.Next(0, 100)) % 26;                }                else if (i == 1)                {                    iIndex = (j + rm.Next(0, 100)) % 10;                }                sb.Append(sSample[i].Substring(iIndex, 1));                if (sb.ToString().Length % 5 == 0)                {                    sb.Append(" ");                }            }            return (iLength < sb.ToString().Length) ? sb.ToString().Substring(0, iLength) : sb.ToString();        }        private void btnClear_Click(object sender, EventArgs e)        {            this.Cursor = Cursors.WaitCursor;            if (Common.ConfirmMsg(this.Text, "你确定清除所有的Sql语句吗?") == DialogResult.Yes)            {                richTxtSql.Text = "";                richTxtSql.Focus();            }            this.Cursor = Cursors.Default;        }        private void btnExit_Click(object sender, EventArgs e)        {            if (Common.ConfirmMsg(this.Text, "你确定要退出吗?") == DialogResult.Yes)            {                this.Close();                System.Windows.Forms.Application.Exit();            }        }        private void chkInsertSql_CheckedChanged(object sender, EventArgs e)        {            bool bResult = Common.CheckEssentialInput(cboTableName, "表名", this.Text);            if (!bResult) return;            this.Cursor = Cursors.WaitCursor;            if (chkInsertSql.Checked)            {                btnExec.Enabled = false;                GetColumnsSql(cboTableName.Text, 1); // 得到insert语句                btnExec.Enabled = true;            }            this.Cursor = Cursors.Default;        }        private void chkUpdateSql_CheckedChanged(object sender, EventArgs e)        {            bool bResult = Common.CheckEssentialInput(cboTableName, "表名", this.Text);            if (!bResult) return;            this.Cursor = Cursors.WaitCursor;            if (chkUpdateSql.Checked)            {                btnExec.Enabled = false;                GetColumnsSql(cboTableName.Text, 2); // 得到update语句                btnExec.Enabled = true;            }            this.Cursor = Cursors.Default;        }        private void chkDeleteSql_CheckedChanged(object sender, EventArgs e)        {            bool bResult = Common.CheckEssentialInput(cboTableName, "表名", this.Text);            if (!bResult) return;            this.Cursor = Cursors.WaitCursor;            if (chkDeleteSql.Checked)            {                btnExec.Enabled = false;                richTxtSql.Text = @"delete from [" + cboTableName.Text + @"] where @condition";                btnExec.Enabled = true;            }            this.Cursor = Cursors.Default;        }        private void rgMode_SelectedIndexChanged(object sender, EventArgs e)        {            if (rgMode.SelectedIndex == 1) // sql登录验证            {                txtUserName.Enabled = true;                txtPassword.Enabled = true;                txtUserName.Focus();            }            else // windows验证            {                txtPassword.Text = "";                txtUserName.Text = "";                txtPassword.Enabled = false;                txtUserName.Enabled = false;            }        }        //private void richSql_TextChanged(object sender, EventArgs e)        //{        //    //string[] sSqlKeyWords = new string[]        //    //{        //    //     "select ", "distinct ", "from ", "where ", "order ", "by ", "group ", "having "        //    //     ," is ", "null ", "isnull ","as "," top "        //    //     ,"sum "," max"," min"," count"," like "," average"        //    //     ,"insert ","update ","delete ","drop ","truncate "," into ","go ","use "," value "," values "        //    //     ,"database "," table "," column ","create ","alter "        //    //};        //    //string[] sSqlKeyWords = new string[]        //    List<string> sSqlKeyWords=new List<string>        //    {        //         "select", "distinct", "from", "where", "order", "by", "group", "having"        //         ,"is", "null", "isnull","as","top"        //         ,"sum","max","min","count"," like","average"        //         ,"insert","update","delete","drop","truncate","into","go","use","value","values"        //         ,"database","table","column","create","alter","set"        //         ,"join","left","right","between","and","not","asc","desc","exists","not exists","add","constraint","primary key"        //         ,"grant","revoke","deny","begin","end","in","not in","tran","transaction","commit","rollback"        //         ,"index","proc","trigger","procedure","function"        //         ,"ltrim","rtrim","getdate","substring","replace"        //    };        //    Common.HiglightRichCtrl(richSql, sSqlKeyWords,true);        //    //Common.HiglightRichCtrl(richSql, new string[] { "上海", "aa", "bb" });        //}        private void btnComment_Click(object sender, EventArgs e)        {            AddCommentForRichTxt(richTxtSql);        }         private void AddCommentForRichTxt(RichTextBox richTxt, string sPrefix = @"--",bool bComment=true)        {            int beginIndex = richTxt.GetLineFromCharIndex(richTxt.SelectionStart);            int lastIndex = richTxt.GetLineFromCharIndex(richTxt.SelectionStart + richTxt.SelectionLength);            string newStr = String.Empty;            string oldStr = richTxt.SelectedText;            if (oldStr == String.Empty)                oldStr = richTxt.Lines[beginIndex];            if (bComment)            {                for (int i = beginIndex; i <= lastIndex; i++)                {                    if (i != lastIndex)                        newStr += sPrefix + richTxt.Lines[i] + "\r\n ";                    else                        newStr += sPrefix + richTxt.Lines[i];                }            }            else            {                for (int i = beginIndex; i <= lastIndex; i++)                {                    if (i != lastIndex)                        newStr += richTxt.Lines[i].TrimStart(sPrefix.ToCharArray()) + "\r\n ";                    else                        newStr += richTxt.Lines[i].TrimStart(sPrefix.ToCharArray());                }            }            richTxt.Text = richTxt.Text.Replace(oldStr, newStr);        }        //private void btnHighlight_Click(object sender, EventArgs e)        //{        //    iClickHighlightCount++;        //    if (iClickHighlightCount % 2 == 0)        //    {        //        richSql.TextChanged -= richSql_TextChanged;// 清除它的事件                     //    }        //    else        //    {        //        richSql.TextChanged += richSql_TextChanged;// 注册它的事件        //    }        //}        #region ### richtextbox 高亮显示        private void richTxtSql_TextChanged(object sender, EventArgs e)        {  //          // c#关键词  //          List<string> sKeywords = new List<string>{ "string ", "int ", "#region ", "#endregion ", "private ", "void ", "this ", "public ", "char ", "return ",    //"if ", "else ", "for ", "ref ", "new ", "try ", "catch ", "true ", "false ", "not ", "null ",  //"using ", "namespace ", "partial ", "class ", "protected ", "float ", "foreach ", "in ",  //"object "};            // sql 关键词            List<string> sKeywords = new List<string>            {                 "select ", "distinct ", "from ", "where ", "order ", "by ", "group ", "having "                 ,"is null", "isnull","as ","top "                 ,"sum","max","min"," count"," like ","average"                 ,"insert ","update ","delete ","drop ","truncate ","into ","go","use ","value","values"                 ,"database ","table ","column ","create ","alter ","set "                 ,"join ","left ","right ","between "," and","not "," asc"," desc"," exists"," not exists"," add"," constraint"," primary key"                 ,"grant ","revoke ","deny ","begin","end","in ","not in","tran","transaction","commit "," rollback"                 ,"index ","proc ","trigger ","procedure ","function ","if ","else ","then "                 ,"ltrim","rtrim","getdate","substring","replace","exec ","execute ","convert","print "                 ,"declare "," int"," varchar"," decimal"," float"," datetime"," date"," smalldatetime"," nvarchar"," smallint"," tinyint"," text"," bit"," char"," money"," image"            };            HighlightRichTxt(richTxtSql, sKeywords);        }        private void HighlightRichTxt(RichTextBox richTxt, List<string> sKeywords)        {            int index = richTxt.SelectionStart;  //记录修改的位置            richTxt.SelectAll();            richTxt.SelectionColor = Color.Black;            foreach (string sWord in sKeywords)            {                getBunch(richTxt, sWord);            }            richTxt.Select(index, 0);   //返回修改的位置            richTxt.SelectionColor = Color.Black;        }        public int getBunch(RichTextBox richTxt, string p) //给关键字上色        {            string s = richTxt.Text;            int cnt = 0;            int M = p.Length;            int N = s.Length;            char[] ss = s.ToCharArray(), pp = p.ToCharArray();            if (M > N)                return 0;            for (int i = 0; i < N - M + 1; i++)            {                int j;                for (j = 0; j < M; j++)                {                    if (ss[i + j] != pp[j])                        break;                }                if (j == p.Length)                {                    richTxt.Select(i, p.Length);                    richTxt.SelectionColor = Color.Blue;                    cnt++;                }            }            return cnt;        }        #endregion        private void btnUmComment_Click(object sender, EventArgs e)        {            AddCommentForRichTxt(richTxtSql,"--",false);        }        private void btnCopy_Click(object sender, EventArgs e)        {            if (richTxtSql.Text.Trim() != "")            {                Clipboard.Clear();                if (richTxtSql.SelectedText == "")                {                    Clipboard.SetText(richTxtSql.Text.Trim());                }                else                {                    Clipboard.SetText(richTxtSql.SelectedText);                }                Common.DisplayMsg(this.Text, "已复制到粘贴板");            }        }    }}

 

主要点:

1,数据库连接登录验证、通过指定服务器得到所有的数据库名、通过指定数据库得到所有的表或视图名

2,针对某个表名,得到这个表的所有列的相关属性

3,针对指定的表名,自动生成 select,insert,update,delete语句

4,针对指定的表名,批量往里造数据(不是通过 for循环)

5,   sql语句的关键词高亮显示(高亮显示的算法是从网上抄的)

6,  使用的devExpress控件。

7,   sql批量生成数据小工具(安装包) 下载地址:http://download.csdn.net/detail/keenweiwei/3677158
原创粉丝点击