// <summary>
 // Calls Clear() on the OleDbParameterCollection and performs
 // a check to make sure it succeeds.  If it does not succeed
 // an exception will be thrown.
 // </summary>
 public static void SafeClear(this OleDbParameterCollection @this)
 {
     // Call the method.
     @this.Clear();
     // Do the sanity check
     if (@this.Count != 0)
     {
         throw new Exception(@"OleDbParameterCollection.Clear() failed.");
     }
 }
示例#2
0
    // <Snippet1>
    public void CreateParamCollection(OleDbCommand command)
    {
        OleDbParameterCollection paramCollection = command.Parameters;

        paramCollection.Add("@CategoryName", OleDbType.Char);
        paramCollection.Add("@Description", OleDbType.Char);
        paramCollection.Add("@Picture", OleDbType.Binary);
        string parameterNames = "";

        for (int i = 0; i < paramCollection.Count; i++)
        {
            parameterNames += paramCollection[i].ToString() + "\n";
        }
        Console.WriteLine(parameterNames);
        paramCollection.Clear();
    }
        protected void ApplyParameters()
        {
            if (_paramList == null)
            {
                return;
            }
            if (_dataAdpater == null)
            {
                return;
            }
            OleDbParameterCollection CommandParams = _dataAdpater.SelectCommand.Parameters;

            CommandParams.Clear();
            int i;

            for (i = 0; i < _paramList.Count; i++)
            {
                CommandParams.Add(new OleDbParameter("@P" + i, _paramList[i]));
            }
        }
示例#4
0
        /// <summary>
        /// 写数据到Excel。
        /// </summary>
        /// <param name="dtSource">数据源</param>
        /// <param name="filePath">Excel导出路径</param>
        /// <param name="excelVersion">excel版本,为ExcelVersion类型</param>
        /// <param name="pHDR">第一行是否标题,为HDRType类型</param>
        public static void SetData(DataTable dtSource, string filePath, string excelVersion, string pHDR)
        {
            //数据源为空
            if (dtSource == null)
            {
                throw new Exception("无数据可导");
            }
            //保存路径为空
            if (string.IsNullOrEmpty(filePath))
            {
                throw new Exception("未设置Excel保存路径");
            }
            //删除文件
            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }

            //链接字符串
            string connectionString = string.Format(m_excelVersion[excelVersion], filePath, pHDR);

            // 连接Excel
            using (OleDbConnection Connection = new OleDbConnection(connectionString))
            {
                Connection.Open();

                //导入数据
                using (OleDbCommand command = new OleDbCommand())
                {
                    command.Connection = Connection;

                    //构建列  格式如:Name VarChar,CreateDate Date
                    string colList = CreateExcelColums(dtSource);

                    //构建插入SQL语句
                    //格式如 "INSERT INTO TABLE [tablename](col1,col2,col3) VALUES(@col1,@col2,@col3)";

                    StringBuilder sbColumNames = new StringBuilder();
                    StringBuilder sbColumValues = new StringBuilder();

                    foreach (DataColumn dc in dtSource.Columns)
                    {
                        sbColumNames.AppendFormat(",[{0}]", dc.ColumnName);
                        sbColumValues.AppendFormat(",@{0}", dc.ColumnName);
                    }

                    //去掉多余的逗号
                    sbColumNames.Remove(0, 1);
                    sbColumValues.Remove(0, 1);

                    //当数据量超过每页最大数据量时,自动分页
                    int totalRows = dtSource.Rows.Count;//总数据量
                    int pageIndex = 0;

                    //开始插入数据  do...while循环是为了处理分页逻辑
                    do
                    {
                        //计算此轮插入的数据量
                        int insertRows = m_maxSheelSize - 1;

                        //如果总数据量没有达到容量
                        if (totalRows < insertRows)
                        {
                            insertRows = totalRows;
                        }

                        string tableName = dtSource.TableName + pageIndex;
                        if (pageIndex == 0)
                        {
                            tableName = "Sheet1";
                        }

                        //创建表框架
                        StringBuilder sbCom = new StringBuilder();
                        sbCom.Append("CREATE TABLE [");
                        sbCom.Append(tableName);
                        sbCom.Append("](");
                        sbCom.Append(colList);
                        sbCom.Append(")");
                        command.CommandText = sbCom.ToString();

                        //try
                        //{
                        command.ExecuteNonQuery();
                        //}
                        //catch
                        //{
                        //    //如果使用Create语句创建失败则直接创建Excel文件
                        //    CreateExcelFile(filePath, excelVersion, command.CommandText);
                        //}

                        //插入数据
                        sbCom = new StringBuilder();
                        sbCom.AppendFormat("INSERT INTO [{0}]({1}) VALUES({2})",
                                            tableName, sbColumNames.ToString(), sbColumValues.ToString());

                        int startIndex = pageIndex * (m_maxSheelSize - 1);
                        int endIndex = pageIndex * (m_maxSheelSize - 1) + insertRows;

                        for (int i = startIndex; i < endIndex; i++)
                        {
                            DataRow drData = dtSource.Rows[i];
                            OleDbParameterCollection dbParam = command.Parameters;
                            dbParam.Clear();
                            foreach (DataColumn dc in dtSource.Columns)
                            {
                                dbParam.Add(new OleDbParameter("@" + dc.ColumnName, GetOleDbTypeByDataColumn(dc)));
                                dbParam["@" + dc.ColumnName].Value = drData[dc.ColumnName];
                            }
                            command.CommandText = sbCom.ToString();
                            command.ExecuteNonQuery();
                        }

                        //计算剩余数据量
                        totalRows = totalRows - insertRows;
                        pageIndex++;

                    } while (totalRows > 0);
                }//end of using OleDbCommand
            }// end of  using OleDbConnection
        }
示例#5
0
        public void OleDbParameterCollection_MultipleScenarios_Success()
        {
            OleDbParameterCollection opc = command.Parameters;

            Assert.True(opc.Count == 0);
            Assert.False(opc.IsReadOnly);
            Assert.False(opc.IsFixedSize);
            Assert.False(opc.IsSynchronized);
            Assert.Throws <IndexOutOfRangeException>(() => opc[0].ParameterName);
            Assert.Throws <IndexOutOfRangeException>(() => opc["@p1"].ParameterName);
            Assert.Throws <ArgumentNullException>(() => opc.Add(null));

            opc.Add((object)new OleDbParameter());
            opc.Add((object)new OleDbParameter());
            Collections.IEnumerator enm = opc.GetEnumerator();
            Assert.True(enm.MoveNext());
            Assert.Equal("Parameter1", ((OleDbParameter)enm.Current).ParameterName);
            Assert.True(enm.MoveNext());
            Assert.Equal("Parameter2", ((OleDbParameter)enm.Current).ParameterName);

            opc.Add(new OleDbParameter(null, null));
            opc.Add(null, OleDbType.Integer, 0, null);
            Assert.Equal("Parameter4", opc["Parameter4"].ParameterName);

            opc.Add(new OleDbParameter("Parameter5", OleDbType.LongVarWChar, 20));
            opc.Add(new OleDbParameter(null, OleDbType.WChar, 20, "a"));

            opc.RemoveAt(opc[3].ParameterName);
            Assert.Equal(-1, opc.IndexOf(null));
            Assert.False(opc.Contains(null));
            Assert.Throws <IndexOutOfRangeException>(() => opc.RemoveAt(null));

            OleDbParameter p = opc[0];

            Assert.Throws <ArgumentException>(() => opc.Add((object)p));
            Assert.Throws <ArgumentException>(() => new OleDbCommand().Parameters.Add(p));
            Assert.Throws <ArgumentNullException>(() => opc.Remove(null));

            string pname = p.ParameterName;

            p.ParameterName = pname;
            p.ParameterName = pname.ToUpper();
            p.ParameterName = pname.ToLower();
            p.ParameterName = "@p1";
            p.ParameterName = pname;

            opc.Clear();
            opc.Add(p);

            opc.Clear();
            opc.AddWithValue("@p1", null);

            Assert.Equal(-1, opc.IndexOf(p.ParameterName));

            opc[0] = p;
            Assert.Equal(0, opc.IndexOf(p.ParameterName));

            Assert.True(opc.Contains(p.ParameterName));
            Assert.True(opc.Contains(opc[0]));

            opc[0] = p;
            opc[p.ParameterName] = new OleDbParameter(p.ParameterName, null);
            opc[p.ParameterName] = (OleDbParameter)OleDbFactory.Instance.CreateParameter();
            opc.RemoveAt(0);

            new OleDbCommand().Parameters.Clear();
            new OleDbCommand().Parameters.CopyTo(new object[0], 0);
            Assert.False(new OleDbCommand().Parameters.GetEnumerator().MoveNext());

            Assert.Throws <InvalidCastException>(() => new OleDbCommand().Parameters.Add(0));
            Assert.Throws <ArgumentNullException>(() => new OleDbCommand().Parameters.AddRange(null));
            Assert.Throws <InvalidCastException>(() => new OleDbCommand().Parameters.Insert(0, 0));
            Assert.Throws <InvalidCastException>(() => new OleDbCommand().Parameters.Remove(0));

            Assert.Throws <ArgumentException>(() => opc.Remove(new OleDbParameter()));
        }
示例#6
0
 public void ClearParameters()
 {
     ParameterCollection.Clear();
 }
示例#7
0
 public void ParameterCollection_Clear()
 {
     oleDbParameterCollection.Clear();
 }
示例#8
0
        /// <summary>
        /// 导出excel
        /// </summary>
        /// <param name="dgvPara"></param>
        public static void ExportExcel(DataGridView dgvPara)
        {
            //int intColIndex = 1;                            //列序号
            int intRowCount = dgvPara.RowCount;             //行数
            int intColCount = dgvPara.ColumnCount;          //列数
            //object[,] objData;                             //保存DataGridView中的数据
            string strFileName = "";

            try
            {
                SaveFileDialog dlg = new SaveFileDialog();
                dlg.DefaultExt = "";
                dlg.Filter     = "Excel|*.xls";
                //dlg.InitialDirectory = Directory.GetCurrentDirectory();
                if (dlg.ShowDialog() == DialogResult.Cancel)
                {
                    return;
                }
                strFileName = dlg.FileName;
                if (strFileName.Trim() == " ")
                {
                    return;
                }
                Environment.CurrentDirectory = System.Windows.Forms.Application.StartupPath;
                if (System.IO.File.Exists(strFileName))
                {
                    System.IO.File.Delete(strFileName);
                }


                int iColCountv = 0;
                for (int i = 0; i < dgvPara.Columns.Count; i++)
                {
                    if (dgvPara.Columns[i].Visible == true)
                    {
                        iColCountv++;
                    }
                }

                //判断:如果行数或者列数有问题,则不予导出
                if (intRowCount == 0)
                {
                    MessageBox.Show("列表中行数为零!", "提示");
                    return;
                }
                if (intColCount == 0)
                {
                    MessageBox.Show("列表中列数为零!", "提示");
                    return;
                }
                if (intRowCount > 65536)
                {
                    MessageBox.Show("数据记录不能超过65536条!", "提示");
                    return;
                }
                if (intColCount > 255)
                {
                    MessageBox.Show("列数不能大于255!", "提示");
                    return;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("输出失败,可能的原因是:" + ex.ToString(), "提示");
                return;
            }

            string          connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileName + ";Extended Properties=Excel 8.0";
            OleDbConnection objConn    = new OleDbConnection(connString);

            try
            {
                StringBuilder stringBuilder = new StringBuilder();
                //先查看此Excel中是否有相关Table,如果有的话就删除,然后导入新的。
                //生成创建表的脚本
                stringBuilder.Append("CREATE TABLE ");
                stringBuilder.Append("Sheet1" + " ( ");
                foreach (DataGridViewColumn col in dgvPara.Columns)
                {
                    if (col.Visible == false)
                    {
                        continue;
                    }
                    stringBuilder.Append(string.Format("[{0}] {1},", col.HeaderText, "VarChar"));
                }
                if (stringBuilder.Length > 0)
                {
                    stringBuilder = stringBuilder.Remove(stringBuilder.Length - 1, 1);
                }
                stringBuilder.Append(")");

                OleDbCommand objCmd = new OleDbCommand();
                objCmd.Connection = objConn;

                //插入新表
                objCmd.CommandText = stringBuilder.ToString();
                objConn.Open();
                //插入新表
                objCmd.ExecuteNonQuery();

                stringBuilder.Remove(0, stringBuilder.Length);

                stringBuilder.Append("INSERT INTO ");
                stringBuilder.Append("Sheet1 ( ");
                //先插入标头
                foreach (DataGridViewColumn col in dgvPara.Columns)
                {
                    if (col.Visible == false)
                    {
                        continue;
                    }
                    stringBuilder.Append("[" + col.HeaderText + "],");
                }
                if (stringBuilder.Length > 0)
                {
                    stringBuilder = stringBuilder.Remove(stringBuilder.Length - 1, 1);
                }
                stringBuilder.Append(") values (");

                foreach (DataGridViewColumn col in dgvPara.Columns)
                {
                    if (col.Visible == false)
                    {
                        continue;
                    }
                    stringBuilder.Append("@" + col.HeaderText.Replace(" ", "").Replace("%", "") + ",");
                }
                if (stringBuilder.Length > 0)
                {
                    stringBuilder = stringBuilder.Remove(stringBuilder.Length - 1, 1);
                }
                stringBuilder.Append(")");

                //建立插入动作的Command
                objCmd.CommandText = stringBuilder.ToString();
                OleDbParameterCollection oleParam = objCmd.Parameters;

                oleParam.Clear();
                foreach (DataGridViewColumn col in dgvPara.Columns)
                {
                    if (col.Visible == false)
                    {
                        continue;
                    }
                    //此处是本版本改进中最实用的地方
                    oleParam.Add(new OleDbParameter("@" + col.HeaderText, OleDbType.VarChar));
                }

                //遍历DataTable将数据插入新建的Excel文件中
                int l = 0;
                foreach (DataGridViewRow row in dgvPara.Rows)
                {
                    l = 0;
                    for (int i = 0; i < dgvPara.Columns.Count; i++)
                    {
                        if (dgvPara.Columns[i].Visible == false)
                        {
                            continue;
                        }
                        oleParam[l].Value = Convert.ToString(row.Cells[i].Value);
                        l++;
                    }

                    objCmd.ExecuteNonQuery();
                }
                //objConn.Close();
                //objConn.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show("输出失败,可能的原因是:" + ex.ToString(), "提示");
                return;
            }
            finally
            {
                objConn.Close();
                objConn.Dispose();
            }

            MessageBox.Show("输出成功!", "提示");
        }
示例#9
0
        public void DataTableToExcel(DataTable dt, string Path)
        {
            string          strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0";
            OleDbConnection myConn  = new OleDbConnection(strConn);
            string          strCom  = "select * from [Sheet1$]";

            myConn.Open();
            OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);

            OleDbCommand objCmd = new OleDbCommand();

            objCmd.Connection = myConn;

            DataSet newds = new DataSet();

            myCommand.Fill(newds, "Table1");

            StringBuilder sb = new StringBuilder();

            OleDbParameterCollection param = objCmd.Parameters;
            DataRow row;

            int rows = dt.Rows.Count;
            int cols = dt.Columns.Count;

            if (newds.Tables["Table1"].Rows.Count >= 1)
            {
                sb.Append("update [Sheet1$] set ");

                for (int i = 0; i < cols; i++)
                {
                    if (i < cols - 1)
                    {
                        sb.Append(newds.Tables["Table1"].Columns[i].ColumnName + "=@" + newds.Tables["Table1"].Columns[i].ColumnName + ",");
                    }
                    else
                    {
                        sb.Append(newds.Tables["Table1"].Columns[i].ColumnName + "=@" + newds.Tables["Table1"].Columns[i].ColumnName + "");
                    }
                }

                //建立插入动作的Command
                objCmd.CommandText = sb.ToString();

                for (int i = 0; i < cols; i++)
                {
                    param.Add(new OleDbParameter("@" + newds.Tables["Table1"].Columns[i].ColumnName, OleDbType.VarChar));
                }

                //遍历DataTable将数据插入新建的Excel文件中
                for (int j = 0; j < newds.Tables["Table1"].Rows.Count; j++)
                {
                    row = dt.Rows[j];
                    for (int i = 0; i < param.Count; i++)
                    {
                        param[i].Value = row[i];
                    }
                    objCmd.ExecuteNonQuery();
                }
            }

            sb.Remove(0, sb.Length);
            param.Clear();
            sb.Append("insert into ");
            sb.Append("[Sheet1$]" + "(");

            for (int i = 0; i < cols; i++)
            {
                if (i < cols - 1)
                {
                    sb.Append(newds.Tables["Table1"].Columns[i].ColumnName + ",");
                }
                else
                {
                    sb.Append(newds.Tables["Table1"].Columns[i].ColumnName + ") values(");
                }
            }
            for (int i = 0; i < cols; i++)
            {
                if (i < cols - 1)
                {
                    sb.Append("@" + newds.Tables["Table1"].Columns[i].ColumnName + ",");
                }
                else
                {
                    sb.Append("@" + newds.Tables["Table1"].Columns[i].ColumnName + ")");
                }
            }

            //建立插入动作的Command
            objCmd.CommandText = sb.ToString();

            for (int i = 0; i < cols; i++)
            {
                param.Add(new OleDbParameter("@" + newds.Tables["Table1"].Columns[i].ColumnName, OleDbType.VarChar));
            }

            //遍历DataTable将数据插入新建的Excel文件中
            for (int j = newds.Tables["Table1"].Rows.Count; j < dt.Rows.Count; j++)
            {
                row = dt.Rows[j];
                for (int i = 0; i < param.Count; i++)
                {
                    param[i].Value = row[i];
                }
                objCmd.ExecuteNonQuery();
            }

            myConn.Close();
        }
示例#10
0
        public string DataTableToExcel(DataSet dstables, string excelPath)
        {
            string connString = string.Format(ConnectionString, excelPath);

            using (OleDbConnection objConn = new OleDbConnection(connString))
            {
                OleDbCommand objCmd = new OleDbCommand();
                objCmd.Connection = objConn;
                objConn.Open();

                foreach (DataTable dt in dstables.Tables)
                {
                    if (dt == null)
                    {
                        return("DataTable不能为空");
                    }
                    int           rows = dt.Rows.Count;
                    int           cols = dt.Columns.Count;
                    StringBuilder sb;

                    if (rows == 0)
                    {
                        return("没有数据");
                    }

                    sb = new StringBuilder();

                    //生成创建表的脚本
                    sb.Append("CREATE TABLE ");
                    sb.Append(dt.TableName + " ( ");

                    for (int i = 0; i < cols; i++)
                    {
                        if (i < cols - 1)
                        {
                            sb.Append(string.Format("{0} varchar,", dt.Columns[i].ColumnName));
                        }
                        else
                        {
                            sb.Append(string.Format("{0} varchar)", dt.Columns[i].ColumnName));
                        }
                    }

                    try
                    {
                        objCmd.CommandText = sb.ToString();
                        objCmd.ExecuteNonQuery();
                    }
                    catch (Exception e)
                    {
                        return("在Excel中创建表失败,错误信息:" + e.Message);
                    }

                    #region 生成插入数据脚本
                    sb.Remove(0, sb.Length);
                    sb.Append("INSERT INTO ");
                    sb.Append(dt.TableName + "( ");

                    for (int i = 0; i < cols; i++)
                    {
                        if (i < cols - 1)
                        {
                            sb.Append(dt.Columns[i].ColumnName + ",");
                        }
                        else
                        {
                            sb.Append(dt.Columns[i].ColumnName + ") values (");
                        }
                    }

                    for (int i = 0; i < cols; i++)
                    {
                        if (i < cols - 1)
                        {
                            sb.Append("@" + dt.Columns[i].ColumnName + ",");
                        }
                        else
                        {
                            sb.Append("@" + dt.Columns[i].ColumnName + ")");
                        }
                    }
                    #endregion


                    //建立插入动作的Command
                    objCmd.CommandText = sb.ToString();
                    OleDbParameterCollection param = objCmd.Parameters;

                    //遍历DataTable将数据插入新建的Excel文件中
                    foreach (DataRow row in dt.Rows)
                    {
                        for (int i = 0; i < cols; i++)
                        {
                            param.Add(new OleDbParameter(dt.Columns[i].ColumnName, row[i].ToString()));
                        }

                        objCmd.ExecuteNonQuery();
                        param.Clear();
                    }
                }
                objConn.Close();
            }
            return("数据已成功导入Excel");
        }
示例#11
0
文件: BaseDB.cs 项目: radtek/safeid
        public void ExecuteNonQuery(String command, CommandType commandType, OleDbParameterCollection Parameters, OleDbTransaction trans)
        {
            if ((i_cn == null) || (i_cn.State == ConnectionState.Closed))
            {
                closeDB();
                openDB();
            }

            Int16 step = 0;

            while ((step < 10) && (conn.State == ConnectionState.Connecting))
            {
                System.Threading.Thread.Sleep(100);
            }

            OleDbCommand cmd = new OleDbCommand(command, i_cn);

            cmd.CommandType    = commandType;
            cmd.CommandTimeout = i_timeout;

            String debug = "";

            try
            {
                if (Parameters != null)
                {
                    cmd.Parameters.Clear();
                    foreach (OleDbParameter par in Parameters)
                    {
                        cmd.Parameters.Add(par.ParameterName, par.OleDbType, par.Size).Value = par.Value;
                        cmd.CommandText = cmd.CommandText.Replace(par.ParameterName, "?");
                    }
                }

                if (trans != null)
                {
                    cmd.Transaction = trans;
                }


                DebugLog(PluginLogType.Debug, "ExecuteNonQuery.SQL = " + cmd.CommandText);

                DebugLog(PluginLogType.Debug, "ExecuteNonQuery.Parameters " + cmd.Parameters.Count);

                foreach (OleDbParameter p in cmd.Parameters)
                {
                    DebugLog(PluginLogType.Debug, "ExecuteNonQuery.Parameters[" + p.ParameterName + "] = " + p.Value);
                }

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                i_lastError = ex.Message;
                throw ex;
            }
            finally
            {
                if (Parameters != null)
                {
                    Parameters.Clear();
                }
                Parameters = null;

                if (cmd != null)
                {
                    cmd.Dispose();
                }
                cmd = null;
            }
        }
示例#12
0
文件: BaseDB.cs 项目: radtek/safeid
        public void Insert2(String insertSQL, OleDbParameterCollection Parameters)
        {
            if ((i_cn == null) || (i_cn.State == ConnectionState.Closed))
            {
                closeDB();
                openDB();
            }

            Int16 step = 0;

            while ((step < 10) && (conn.State == ConnectionState.Connecting))
            {
                System.Threading.Thread.Sleep(100);
            }

            DebugLog(PluginLogType.Debug, "insertSQL.SQL = " + insertSQL);

            OleDbCommand    cmd = new OleDbCommand(insertSQL, i_cn);
            OleDbDataReader dr  = null;

            try
            {
                if (Parameters != null)
                {
                    cmd.Parameters.Clear();
                    foreach (OleDbParameter par in Parameters)
                    {
                        cmd.Parameters.Add(par.ParameterName, par.OleDbType, par.Size).Value = par.Value;
                    }
                }

                DebugLog(PluginLogType.Debug, "Insert2.Parameters " + cmd.Parameters.Count);

                foreach (OleDbParameter p in cmd.Parameters)
                {
                    DebugLog(PluginLogType.Debug, "Insert2.Parameters[" + p.ParameterName + "] = " + p.Value);
                }

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                i_lastError = ex.Message;
                throw ex;
            }
            finally
            {
                if (Parameters != null)
                {
                    Parameters.Clear();
                }
                Parameters = null;

                if (cmd != null)
                {
                    cmd.Dispose();
                }
                if (dr != null)
                {
                    dr.Close();
                }

                cmd = null;
            }
        }
示例#13
0
文件: BaseDB.cs 项目: radtek/safeid
        public void Insert(String insertSQL, OleDbParameterCollection Parameters)
        {
            OleDbConnection conn = new OleDbConnection(i_ConnectionString);

            conn.Open();

            Int16 step = 0;

            while ((step < 10) && (conn.State == ConnectionState.Connecting))
            {
                System.Threading.Thread.Sleep(100);
            }

            OleDbCommand    cmd = null;
            OleDbDataReader dr  = null;

            try
            {
                cmd = new OleDbCommand(insertSQL, conn);
                if (Parameters != null)
                {
                    cmd.Parameters.Clear();
                    foreach (OleDbParameter par in Parameters)
                    {
                        cmd.Parameters.Add(par.ParameterName, par.OleDbType, par.Size).Value = par.Value;
                    }
                }

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                i_lastError = ex.Message;
                throw ex;
            }
            finally
            {
                if (Parameters != null)
                {
                    Parameters.Clear();
                }
                Parameters = null;

                if (cmd != null)
                {
                    cmd.Dispose();
                }
                if (dr != null)
                {
                    dr.Close();
                }
                if (conn != null)
                {
                    conn.Close();
                }
                if (conn != null)
                {
                    conn.Dispose();
                }

                cmd = null;
            }
        }
示例#14
0
 public void LimparParametros()
 {
     parameterCollection.Clear();
 }
 public override void Clear()
 {
     _vfpParamCollection.Clear();
     _oleDbParameterCollection.Clear();
 }
示例#16
0
        public override void ProcessDeploy(String cacheId, PluginConnectorBaseDeployPackage package, Dictionary <String, Object> config, List <PluginConnectorBaseDeployPackageMapping> fieldMapping)
        {
            if (!CheckInputConfig(config, true, Log))
            {
                return;
            }

            DirectoryInfo importDir = null;;

            try
            {
                importDir = new DirectoryInfo(Path.Combine(config["import_folder"].ToString(), "out"));
                if (!importDir.Exists)
                {
                    importDir.Create();
                }
            }
            catch (Exception ex)
            {
                Log2(this, PluginLogType.Error, 0, 0, "Erro ao criar o diretório de importação (" + config["import_folder"].ToString() + "\\Out\\)", ex.Message);
                return;
            }

            FileInfo f = new FileInfo(Path.Combine(importDir.FullName, "export" + DateTime.Now.ToString("yyyyMMddHHmmss-ffffff") + ".xlsx"));

            if (!f.Directory.Exists)
            {
                f.Directory.Create();
            }


            String table = "Export " + DateTime.Now.ToString("HHmmss");

            String lock_column    = (config.ContainsKey("lock_column") ? config["lock_column"].ToString().ToLower() : null);
            String locked_value   = (config.ContainsKey("locked_value") ? config["locked_value"].ToString().ToLower() : null);
            String unlocked_value = (config.ContainsKey("unlocked_value") ? config["unlocked_value"].ToString().ToLower() : null);

            OdbcDB        db         = null;
            StringBuilder processLog = new StringBuilder();
            PluginLogType logType    = PluginLogType.Information;

            try
            {
                List <String> columnNames = new List <String>();
                foreach (PluginConnectorBaseDeployPackageMapping m in fieldMapping)
                {
                    if (!columnNames.Contains(m.dataName))
                    {
                        columnNames.Add(m.dataName);
                    }
                }

                if ((!String.IsNullOrEmpty(lock_column)) && (!columnNames.Contains(lock_column)))
                {
                    columnNames.Add(lock_column);
                }

                db = new OdbcDB(f);
                db.createAndOpenDB(table, columnNames);

                List <String> prop = new List <String>();

                String login = package.login;

                //Resgata a restutura da tabela de destino
                DataTable dtInsertSchema = db.GetSchema(table);

                table = dtInsertSchema.TableName;

                //Monta o where
                OleDbParameterCollection par = OdbcDB.GetSqlParameterObject();

                //Monta todos os campos que serão inseridos/atualizados
                Dictionary <String, String> data = new Dictionary <String, String>();

                foreach (DataColumn dc in dtInsertSchema.Columns)
                {
                    if (!data.ContainsKey(dc.ColumnName.ToLower()))
                    {
                        data.Add(dc.ColumnName.ToLower(), null);
                    }
                }

                if (data.ContainsKey("locked"))
                {
                    data["locked"] = (package.locked || package.temp_locked ? "1" : "0");
                }

                DebugLog(this, PluginLogType.Debug, package.entityId, package.identityId, "lock_column = " + (String.IsNullOrEmpty(lock_column) ? "empty" : lock_column), "");
                DebugLog(this, PluginLogType.Debug, package.entityId, package.identityId, "locked_value = " + (String.IsNullOrEmpty(locked_value) ? "empty" : locked_value), "");
                DebugLog(this, PluginLogType.Debug, package.entityId, package.identityId, "unlocked_value = " + (String.IsNullOrEmpty(unlocked_value) ? "empty" : unlocked_value), "");

                if ((lock_column != null) && (data.ContainsKey(lock_column)))
                {
                    if ((package.locked || package.temp_locked) && (!String.IsNullOrEmpty(locked_value)))
                    {
                        data[lock_column] = locked_value;
                    }
                    else if ((!package.locked && !package.temp_locked) && (!String.IsNullOrEmpty(unlocked_value)))
                    {
                        data[lock_column] = unlocked_value;
                    }
                    else
                    {
                        data[lock_column] = (package.locked || package.temp_locked ? "1" : "0");
                    }

                    DebugLog(this, PluginLogType.Debug, package.entityId, package.identityId, "data[lock_column] = " + data[lock_column], "");
                }

                String password_column = "";
                foreach (PluginConnectorBaseDeployPackageMapping m in fieldMapping)
                {
                    if (m.isPassword && data.ContainsKey(m.dataName))
                    {
                        data[m.dataName] = package.password;
                        password_column  = m.dataName;
                    }
                    else if (m.isLogin && data.ContainsKey(m.dataName))
                    {
                        data[m.dataName] = package.login;
                    }
                    else if (m.isName && data.ContainsKey(m.dataName))
                    {
                        data[m.dataName] = package.fullName.fullName;
                    }
                }

                /*if (login_column != null && data.ContainsKey(login_column))
                 *  data[login_column] = package.login;
                 *
                 * if (password_column != null && data.ContainsKey(password_column))
                 *  data[password_column] = package.password;
                 *
                 * if (name_column != null && data.ContainsKey(name_column))
                 *  data[name_column] = package.fullName.fullName;*/


                foreach (PluginConnectorBasePackageData dt in package.importsPluginData)
                {
                    if (data.ContainsKey(dt.dataName.ToLower()) && data[dt.dataName.ToLower()] == null)
                    {
                        data[dt.dataName.ToLower()] = dt.dataValue;
                        //DebugLog(this, PluginLogType.Debug, package.entityId, package.identityId, "1. data[" + dt.dataName.ToLower() + "] = " + dt.dataValue, "");
#if DEBUG
                        processLog.AppendLine("1. data[" + dt.dataName.ToLower() + "] = " + dt.dataValue);
#endif
                    }
                }

                foreach (PluginConnectorBasePackageData dt in package.pluginData)
                {
                    if (data.ContainsKey(dt.dataName.ToLower()) && data[dt.dataName.ToLower()] == null)
                    {
                        data[dt.dataName.ToLower()] = dt.dataValue;
                        //DebugLog(this, PluginLogType.Debug, package.entityId, package.identityId, "2. data[" + dt.dataName.ToLower() + "] = " + dt.dataValue, "");
#if DEBUG
                        processLog.AppendLine("2. data[" + dt.dataName.ToLower() + "] = " + dt.dataValue);
#endif
                    }
                }

                foreach (PluginConnectorBasePackageData dt in package.properties)
                {
                    if (data.ContainsKey(dt.dataName.ToLower()) && data[dt.dataName.ToLower()] == null)
                    {
                        data[dt.dataName.ToLower()] = dt.dataValue;
                        //DebugLog(this, PluginLogType.Debug, package.entityId, package.identityId, "3. data[" + dt.dataName.ToLower() + "] = " + dt.dataValue, "");
#if DEBUG
                        processLog.AppendLine("3. data[" + dt.dataName.ToLower() + "] = " + dt.dataValue);
#endif
                    }
                }


                foreach (String k in data.Keys)
                {
                    //DebugLog(this, PluginLogType.Debug, package.entityId, package.identityId, "4. data[" + k + "] = " + data[k], "");
#if DEBUG
                    processLog.AppendLine("4. data[" + k + "] = " + data[k]);
#endif
                }


                LogEvent dbExecLog = new LogEvent(delegate(Object sender, PluginLogType type, String text)
                {
                    processLog.AppendLine(text);
                });


                //Não existe, cria

                if ((data.ContainsKey(password_column)) && (package.password == ""))
                {
                    package.password      = IAM.Password.RandomPassword.Generate(16);
                    data[password_column] = package.password;
                    processLog.AppendLine("User not found in AD and IAM Password not found in properties list, creating a random password (" + package.password + ")");
                }

                //Limpa os parâmetros
                par.Clear();

                List <String> c1 = new List <string>();
                List <String> c2 = new List <string>();
                foreach (DataColumn dc in dtInsertSchema.Columns)
                {
                    if (data.ContainsKey(dc.ColumnName.ToLower()))
                    {
                        if (!String.IsNullOrWhiteSpace(data[dc.ColumnName.ToLower()]))
                        {
                            if (dc.DataType.Equals(typeof(String)))
                            {
                                String txt = Corte((data[dc.ColumnName.ToLower()] != null ? data[dc.ColumnName.ToLower()] : ""), dc.MaxLength);
                                par.Add("@" + dc.ColumnName, GetDBType(dc.DataType), txt.Length).Value = txt;
                            }
                            else
                            {
                                par.Add("@" + dc.ColumnName, GetDBType(dc.DataType)).Value = data[dc.ColumnName.ToLower()];
                            }

                            c1.Add(dc.ColumnName);
                            c2.Add("@" + dc.ColumnName);
                        }
                    }
                }


                foreach (OleDbParameter p in par)
                {
                    //DebugLog(this, PluginLogType.Debug, package.entityId, package.identityId, "6. par[" + p.ParameterName + "] = " + p.Value, "");
#if DEBUG
                    processLog.AppendLine("6. par[" + p.ParameterName + "] = " + p.Value);
#endif
                }

                String insert = "insert into [" + table + "] (" + String.Join(",", c1) + ") values (" + String.Join(",", c2) + ")";

                db.OnLog += dbExecLog;
                db.ExecuteNonQuery(insert, CommandType.Text, par);
                db.OnLog -= dbExecLog;

                NotityChangeUser(this, package.entityId);

                processLog.AppendLine("User added");

                /*
                 * //Executa as ações do RBAC
                 * if ((package.pluginAction != null) && (package.pluginAction.Count > 0))
                 * {
                 *  foreach (PluginConnectorBaseDeployPackageAction act in package.pluginAction)
                 *      try
                 *      {
                 *          switch (act.actionKey.ToLower())
                 *          {
                 *              case "procedure":
                 *                  String sql1 = act.actionValue.Replace("{login}", package.login).Replace("{full_name}", package.fullName.fullName);
                 *                  db.ExecuteNonQuery(sql1, CommandType.StoredProcedure, null);
                 *                  break;
                 *
                 *              case "sql":
                 *                  String sql2 = act.actionValue.Replace("{login}", package.login).Replace("{full_name}", package.fullName.fullName);
                 *                  db.ExecuteNonQuery(sql2, CommandType.Text, null);
                 *                  break;
                 *
                 *              default:
                 *                  processLog.AppendLine("Action not recognized: " + act.actionKey);
                 *                  Log2(this, PluginLogType.Warning, package.entityId, package.identityId, "Action not recognized: " + act.actionKey, "");
                 *                  break;
                 *          }
                 *      }
                 *      catch (Exception ex)
                 *      {
                 *          processLog.AppendLine("Error on execute action (" + act.actionKey + "): " + ex.Message);
                 *          Log2(this, PluginLogType.Error, package.entityId, package.identityId, "Error on execute action (" + act.actionKey + "): " + ex.Message, "");
                 *      }
                 * }*/
            }
            catch (Exception ex)
            {
                logType = PluginLogType.Error;
                processLog.AppendLine("Error on process deploy: " + ex.Message);

                String debugInfo = JSON.Serialize2(new { package = package, fieldMapping = fieldMapping });
                if (package.password != "")
                {
                    debugInfo = debugInfo.Replace(package.password, "Replaced for user security");
                }

                Log2(this, PluginLogType.Error, package.entityId, package.identityId, "Error on process deploy: " + ex.Message, debugInfo);
            }
            finally
            {
                if (db != null)
                {
                    db.Dispose();
                }

                Log2(this, logType, package.entityId, package.identityId, "Deploy executed", processLog.ToString());
                processLog.Clear();
                processLog = null;
            }
        }