Exemple #1
0
 /// <summary>
 /// Creates the connection object and opens it with the specified connection string.
 /// </summary>
 private void OpenConnection(ref ADODB.Connection oConn)
 {
     ConnectionString = Config.Setting(ConnectionName);
     if (Config.bSetting(ConnectionName + ".Encrypted"))
     {
         ConnectionString = CSAAWeb.Cryptor.Decrypt(ConnectionString, CSAAWeb.Constants.CS_STRING);
     }
     if (ConnectionString.ToLower().IndexOf("dsn=") == -1 &&
         ConnectionString.ToLower().IndexOf("provider=") == -1)
     {
         ConnectionString = "Provider=SQLOLEDB.1;" + ConnectionString;
     }
     oConn = new ADODB.ConnectionClass();
     oConn.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, oConn, new object[] { ConnectionString });
 }
        private bool IsColumnNullable(string name, string column)
        {
            if (radioSql.Checked || radioSql2005.Checked)
            {
                int tableid = Convert.ToInt32(DbSession.Default.FromSql("select id from sysobjects where [name] = '" + name + "'").ToScalar());
                int isnullable = Convert.ToInt32(DbSession.Default.FromSql("select isnullable from syscolumns where [name] = '" + column + "' and id = " + tableid).ToScalar());
                return isnullable == 1;
            }
            else if (radioOracle.Checked)
            {
                string isnullable = DbSession.Default.FromSql("select NULLABLE,COLUMN_NAME,DATA_TYPE,DATA_PRECISION,DATA_SCALE from user_tab_columns "
                + " where upper(table_name) ='" + name.ToUpper() + "' and upper(column_name) = '" + column.ToUpper() + "'").ToScalar<string>();
                return isnullable.ToUpper() == "Y";
            }
            else if (radioSQLite.Checked)
            {
                System.Data.Common.DbConnection conn = DbSession.Default.CreateConnection();
                conn.Open();
                DataTable table = conn.GetSchema("COLUMNS");
                conn.Close();
                foreach (DataRow row in table.Rows)
                {
                    if (row["TABLE_NAME"].ToString() == name && row["COLUMN_NAME"].ToString() == column)
                    {
                        return Convert.ToBoolean(row["IS_NULLABLE"].ToString());
                    }
                }
            }
            else if (radioMySQL.Checked)
            {
                System.Data.Common.DbConnection conn = DbSession.Default.CreateConnection();
                conn.Open();
                DataTable table = conn.GetSchema("COLUMNS");
                conn.Close();
                foreach (DataRow row in table.Rows)
                {
                    if (row["TABLE_NAME"].ToString() == name && row["COLUMN_NAME"].ToString() == column)
                    {
                        return row["IS_NULLABLE"].ToString().ToUpper() == "YES";
                    }
                }
            }
            else if (radioAccess.Checked)
            {
                string connStr = txtConnStr.Text;
                ADODB.ConnectionClass conn = new ADODB.ConnectionClass();
                conn.Open(connStr);

                ADODB.Recordset rs = conn.GetType().InvokeMember("OpenSchema", BindingFlags.InvokeMethod, null, conn, new object[] { ADODB.SchemaEnum.adSchemaColumns }) as ADODB.Recordset;
                rs.Filter = "TABLE_NAME='" + name + "'";

                while (!rs.EOF)
                {
                    if (rs.Fields["COLUMN_NAME"].Value.ToString() == column)
                    {
                        bool result = Convert.ToBoolean(rs.Fields["IS_NULLABLE"].Value);
                        rs.Close();
                        conn.Close();
                        return result;
                    }

                    rs.MoveNext();
                }
            }

            return false;
        }
        private bool IsColumnReadOnly(string name, string column)
        {
            if (radioSql.Checked || radioSql2005.Checked)
            {
                int tableid = Convert.ToInt32(DbSession.Default.FromSql("select id from sysobjects where [name] = '" + name + "'").ToScalar());
                byte status = Convert.ToByte(DbSession.Default.FromSql("select status from syscolumns where [name] = '" + column + "' and id =" + tableid).ToScalar());
                return status == 128;
            }
            else if (radioAccess.Checked)
            {
                string connStr = txtConnStr.Text;
                ADODB.ConnectionClass conn = new ADODB.ConnectionClass();
                conn.Open(connStr);

                ADODB.Recordset rs = conn.GetType().InvokeMember("OpenSchema", BindingFlags.InvokeMethod, null, conn, new object[] { ADODB.SchemaEnum.adSchemaColumns }) as ADODB.Recordset;
                rs.Filter = "TABLE_NAME='" + name + "'";

                while (!rs.EOF)
                {
                    if (rs.Fields["COLUMN_NAME"].Value.ToString() == column && ((int)rs.Fields["DATA_TYPE"].Value) == 3 && Convert.ToByte(rs.Fields["COLUMN_FLAGS"].Value) == 90)
                    {
                        rs.Close();
                        conn.Close();
                        return true;
                    }

                    rs.MoveNext();
                }
            }
            else if (radioSQLite.Checked)
            {
                System.Data.Common.DbConnection conn = DbSession.Default.CreateConnection();
                conn.Open();
                DataTable table = conn.GetSchema("COLUMNS");
                conn.Close();
                foreach (DataRow row in table.Rows)
                {
                    if (row["TABLE_NAME"].ToString() == name && row["COLUMN_NAME"].ToString() == column && row["DATA_TYPE"].ToString() == "INTEGER")
                    {
                        return true;
                    }
                }
            }
            else if (radioMySQL.Checked)
            {
                System.Data.Common.DbConnection conn = DbSession.Default.CreateConnection();
                conn.Open();
                DataTable table = conn.GetSchema("COLUMNS");
                conn.Close();
                foreach (DataRow row in table.Rows)
                {
                    if (row["TABLE_NAME"].ToString() == name && row["COLUMN_NAME"].ToString() == column && row["EXTRA"].ToString().ToUpper() == "AUTO_INCREMENT")
                    {
                        return true;
                    }
                }
            }

            return false;
        }
        private bool IsColumnPrimaryKey(string name, string column)
        {
            if (radioSql.Checked || radioSql2005.Checked)
            {
                int tableid = Convert.ToInt32(DbSession.Default.FromSql("select id from sysobjects where [name] = '" + name + "'").ToScalar());
                DataSet ds = DbSession.Default.FromSql("select a.name FROM syscolumns a inner join sysobjects d on a.id=d.id and d.xtype='U' "
                + " and d.name<>'dtproperties' where (SELECT count(*) FROM sysobjects WHERE (name in (SELECT name FROM sysindexes WHERE (id = a.id) AND "
                + " (indid in (SELECT indid FROM sysindexkeys WHERE (id = a.id) AND (colid in (SELECT colid FROM syscolumns WHERE (id = a.id) "
                + " AND (name = a.name))))))) AND (xtype = 'PK'))>0 and d.id = " + tableid).ToDataSet();
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    if (ds.Tables[0].Rows[i][0].ToString() == column)
                    {
                        return true;
                    }
                }
            }
            else if (radioOracle.Checked)
            {
                DataSet ds = DbSession.Default.FromSql("select col.column_name from user_constraints con,user_cons_columns col where con.constraint_name = "
                + " col.constraint_name and con.constraint_type='P' and upper(col.table_name) = '" + name.ToUpper() + "'").ToDataSet();
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    if (ds.Tables[0].Rows[i][0].ToString() == column)
                    {
                        return true;
                    }
                }
            }
            else if (radioAccess.Checked)
            {
                string connStr = txtConnStr.Text;
                ADODB.ConnectionClass conn = new ADODB.ConnectionClass();
                conn.Open(connStr);

                ADODB.Recordset rs = conn.GetType().InvokeMember("OpenSchema", BindingFlags.InvokeMethod, null, conn, new object[] { ADODB.SchemaEnum.adSchemaPrimaryKeys }) as ADODB.Recordset;
                rs.Filter = "TABLE_NAME='" + name + "'";

                while (!rs.EOF)
                {
                    if (rs.Fields["COLUMN_NAME"].Value.ToString() == column)
                    {
                        rs.Close();
                        conn.Close();
                        return true;
                    }

                    rs.MoveNext();
                }
            }
            else if (radioSQLite.Checked)
            {
                System.Data.Common.DbConnection conn = DbSession.Default.CreateConnection();
                conn.Open();
                DataTable table = conn.GetSchema("COLUMNS");
                conn.Close();
                foreach (DataRow row in table.Rows)
                {
                    if (row["TABLE_NAME"].ToString() == name && row["COLUMN_NAME"].ToString() == column)
                    {
                        return Convert.ToBoolean(row["PRIMARY_KEY"].ToString());
                    }
                }
            }
            else if (radioMySQL.Checked)
            {
                System.Data.Common.DbConnection conn = DbSession.Default.CreateConnection();
                conn.Open();
                DataTable table = conn.GetSchema("COLUMNS");
                conn.Close();
                foreach (DataRow row in table.Rows)
                {
                    if (row["TABLE_NAME"].ToString() == name && row["COLUMN_NAME"].ToString() == column)
                    {
                        return row["COLUMN_KEY"].ToString().ToUpper() == "PRI";
                    }
                }
            }

            return false;
        }
        private void btnConnect_Click(object sender, EventArgs e)
        {
            if (txtConnStr.Text.Trim().Length == 0)
            {
                MessageBox.Show("连接字符串不能为空!");
                return;
            }

            if (btnConnect.Text == "断开服务器连接")
            {
                chkCreateAssembly.Checked = false;
                chkCreateAssembly_CheckedChanged(sender, e);

                EnableGenEntity(false);
                return;
            }

            RefreshConnectionStringAutoComplete();

            DataSet dsTables = null;
            DataSet dsViews = null;

            try
            {
                if (radioSql.Checked || radioSql2005.Checked)
                {
                    DbProvider dbProvider = new SqlServerProvider(txtConnStr.Text);
                    DbSession.SetDefault(dbProvider);

                    if (radioSql2005.Checked)
                    {
                        dsTables = DbSession.Default.FromSql("select [name] from sysobjects where xtype = 'U' and [name] <> 'sysdiagrams' order by [name]").ToDataSet();
                    }
                    else
                    {
                        dsTables = DbSession.Default.FromSql("select [name] from sysobjects where xtype = 'U' and status > 0 order by [name]").ToDataSet();
                    }
                    foreach (DataRow row in dsTables.Tables[0].Rows)
                    {
                        tables.Items.Add(row["Name"].ToString());
                    }

                    if (radioSql2005.Checked)
                    {
                        dsViews = DbSession.Default.FromSql("select [name] from sysobjects where xtype = 'V' order by [name]").ToDataSet();
                    }
                    else
                    {
                        dsViews = DbSession.Default.FromSql("select [name] from sysobjects where xtype = 'V' and status > 0 order by [name]").ToDataSet();
                    }
                    foreach (DataRow row in dsViews.Tables[0].Rows)
                    {
                        views.Items.Add(row["Name"].ToString());
                    }
                }
                else if (radioOracle.Checked)
                {
                    DbProvider dbProvider = new OracleProvider(txtConnStr.Text);
                    DbSession.SetDefault(dbProvider);

                    dsTables = DbSession.Default.FromSql("select table_name Name from user_tables").ToDataSet();
                    foreach (DataRow row in dsTables.Tables[0].Rows)
                    {
                        tables.Items.Add(row["Name"].ToString());
                    }

                    dsViews = DbSession.Default.FromSql("select view_name Name from user_views").ToDataSet();
                    foreach (DataRow row in dsViews.Tables[0].Rows)
                    {
                        views.Items.Add(row["Name"].ToString());
                    }
                }
                else if (radioAccess.Checked)
                {
                    DbProvider dbProvider = new MsAccessProvider(txtConnStr.Text);
                    DbSession.SetDefault(dbProvider);

                    string connStr = txtConnStr.Text;
                    ADODB.ConnectionClass conn = new ADODB.ConnectionClass();
                    conn.Open(connStr);

                    ADODB.Recordset rsTables = conn.GetType().InvokeMember("OpenSchema", BindingFlags.InvokeMethod, null, conn, new object[] { ADODB.SchemaEnum.adSchemaTables }) as ADODB.Recordset;
                    ADODB.Recordset rsViews = conn.GetType().InvokeMember("OpenSchema", BindingFlags.InvokeMethod, null, conn, new object[] { ADODB.SchemaEnum.adSchemaViews }) as ADODB.Recordset;

                    while (!rsViews.EOF)
                    {
                        if (rsTables.Fields["TABLE_TYPE"].Value.ToString() == "VIEW")
                        {
                            views.Items.Add(rsViews.Fields["TABLE_NAME"].Value.ToString());
                        }
                        rsViews.MoveNext();
                    }

                    while (!rsTables.EOF)
                    {
                        if (rsTables.Fields["TABLE_TYPE"].Value.ToString() == "TABLE")
                        {
                            tables.Items.Add(rsTables.Fields["TABLE_NAME"].Value.ToString());
                        }
                        rsTables.MoveNext();
                    }

                    rsTables.Close();
                    rsViews.Close();

                    conn.Close();
                }
                else if (radioSQLite.Checked)
                {
                    DbProvider dbProvider = DbProviderFactory.CreateDbProvider(DbProviderType.SQLite, txtConnStr.Text);
                    DbSession.SetDefault(dbProvider);

                    System.Data.Common.DbConnection conn = DbSession.Default.CreateConnection();
                    conn.Open();
                    DataTable table1 = conn.GetSchema("TABLES");
                    DataTable table2 = conn.GetSchema("VIEWS");
                    conn.Close();
                    foreach (DataRow row in table1.Rows)
                    {
                        if (row["TABLE_TYPE"].ToString().ToUpper() == "TABLE")
                        {
                            tables.Items.Add(row["TABLE_NAME"].ToString());
                        }
                    }
                    foreach (DataRow row in table2.Rows)
                    {
                        views.Items.Add(row["TABLE_NAME"].ToString());
                    }
                }
                else if (radioMySQL.Checked)
                {
                    DbProvider dbProvider = DbProviderFactory.CreateDbProvider(DbProviderType.MySql, txtConnStr.Text);
                    DbSession.SetDefault(dbProvider);

                    System.Data.Common.DbConnection conn = DbSession.Default.CreateConnection();
                    conn.Open();
                    DataTable table1 = conn.GetSchema("TABLES");
                    DataTable table2 = conn.GetSchema("VIEWS");
                    conn.Close();
                    foreach (DataRow row in table1.Rows)
                    {
                        if (row["TABLE_TYPE"].ToString() == "BASE TABLE")
                        {
                            tables.Items.Add(row["TABLE_NAME"].ToString());
                        }
                    }
                    foreach (DataRow row in table2.Rows)
                    {
                        views.Items.Add(row["TABLE_NAME"].ToString());
                    }
                }


                EnableGenEntity(true);
            }
            catch (Exception ex)
            {
                EnableGenEntity(false);
                MessageBox.Show(ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }