zoukankan      html  css  js  c++  java
  • C#在sql中使用變量訪問Oracle數據庫

    1.首先創建一個測試數據表

    CREATE TABLE people
    (
    SNO VARCHAR2(10 BYTE),
    SNAME VARCHAR2(10 BYTE),
    SSEX VARCHAR2(10 BYTE),
    SAGE number,
    SDEPT VARCHAR2(10 BYTE),
    BTDATE DATE
    )
    
    
    SET DEFINE OFF;
    Insert into PEOPLE
    (SNO, SNAME, SSEX, SAGE, SDEPT,BTDATE)
    Values
    ('200215122', '劉晨', '', '19', 'CS', TO_DATE('12/31/2014 18:25:19', 'MM/DD/YYYY HH24:MI:SS'));
    Insert into PEOPLE
    (SNO, SNAME, SSEX, SAGE, SDEPT,BTDATE)
    Values
    ('200215123', '王敏', '', '18', 'MA', TO_DATE('12/31/2014 18:25:19', 'MM/DD/YYYY HH24:MI:SS'));
    Insert into PEOPLE
    (SNO, SNAME, SSEX, SAGE, SDEPT,BTDATE)
    Values
    ('200215125', '張力', '', '19', 'IS', TO_DATE('12/31/2014 18:25:19', 'MM/DD/YYYY HH24:MI:SS'));
    Insert into PEOPLE
    (SNO, SNAME, SSEX, SAGE, SDEPT,BTDATE)
    Values
    ('200215122', '小趙', '', '19', 'MA', TO_DATE('12/31/2015 18:25:19', 'MM/DD/YYYY HH24:MI:SS'));
    Insert into PEOPLE
    (SNO, SNAME, SSEX, SAGE, SDEPT,BTDATE)
    Values
    ('200215121', '李勇', '', '23', 'CS', TO_DATE('1/31/2015 18:25:20', 'MM/DD/YYYY HH24:MI:SS'));
    Insert into PEOPLE
    (SNO, SNAME, SSEX, SAGE, SDEPT,BTDATE)
    Values
    ('200215126', '小翠', '', '22', 'CS', TO_DATE('12/31/2014 18:25:20', 'MM/DD/YYYY HH24:MI:SS'));
    COMMIT;

    2.設計一個WINFROM的查詢介面

    3.後臺主要代碼如下:

    public DataTable XxSelect(string sql, DateTime? begintime, DateTime? endtime, string[,] array, string btime, string dtime)
                {
                    string constr = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.93.64.242)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=wmstest)));User ID=asrs;Password=asrs123";
                    //string constr = @"Data Source=orcl;Persist Security Info=True;User ID=DBSNMP;Password=dbsnmp";
                    OracleConnection con = new OracleConnection(constr);
    
                    //數組處理--去除空數據
                    int count = 0;
                    for (int i = 0; i < array.GetLength(0); i++)
                    {
                        if (array[i, 1] != null)
                        {
                            count++;
                        }
                    }
                    ArrayList al = new ArrayList();
                    ArrayList ar = new ArrayList();
                    for (int i = 0; i < count; i++)
                    {
                        if (array[i, 1] != string.Empty)
                        {
                            al.Add(array[i, 0]);
                            ar.Add(array[i, 1]);
                        }
                    }
                    string[,] alr = new string[al.Count, 2];
                    for (int m = 0; m < alr.GetLength(0); m++)
                    {
                        alr[m, 0] = (string)al[m];
                        alr[m, 1] = (string)ar[m];
                    }
                    try
                    {  //變量賦值
                        con.Open();
                        OracleParameter[] myParamArray = new OracleParameter[alr.Length + 2];
                        OracleCommand command = new OracleCommand(sql, con);
                        OracleDataAdapter da = new OracleDataAdapter();
                        string ccBTime = @":" + btime;
                        string ccDTime = @":" + dtime;
                        if (begintime==null && endtime==null)
                        {
                            for (int j = 0; j < alr.GetLength(0); j++)
                            {
                                string ccStr = @":" + alr[j, 0];
                                myParamArray[j] = new OracleParameter(ccStr, OracleType.VarChar, 50);
                                myParamArray[j].Value = alr[j, 1];
                                command.Parameters.Add(myParamArray[j]);
                            }
                        }
                        if (begintime != null && endtime == null)
                        {
                            myParamArray[0] = new OracleParameter(ccBTime, OracleType.DateTime);
                            myParamArray[0].Value = begintime;
                            command.Parameters.Add(myParamArray[0]);
                            for (int j = 1; j < alr.GetLength(0) + 1; j++)
                            {
                                string ccStr = @":" + alr[j - 1, 0];
                                myParamArray[j] = new OracleParameter(ccStr, OracleType.VarChar, 50);
                                myParamArray[j].Value = alr[j - 1, 1];
                                command.Parameters.Add(myParamArray[j]);
                            }
                        }
                        if (begintime == null && endtime != null)
                        {
                            myParamArray[0] = new OracleParameter(ccDTime, OracleType.DateTime);
                            myParamArray[0].Value = endtime;
                            command.Parameters.Add(myParamArray[0]);
                            for (int j = 1; j < alr.GetLength(0) + 1; j++)
                            {
                                string ccStr = @":" + alr[j - 1, 0];
                                myParamArray[j] = new OracleParameter(ccStr, OracleType.VarChar, 50);
                                myParamArray[j].Value = alr[j - 1, 1];
                                command.Parameters.Add(myParamArray[j]);
                            }
                        }
                        if (begintime != null && endtime != null)
                        {
                            myParamArray[0] = new OracleParameter(ccBTime, OracleType.DateTime);
                            myParamArray[0].Value = begintime;
                            command.Parameters.Add(myParamArray[0]);
                            myParamArray[1] = new OracleParameter(ccDTime, OracleType.DateTime);
                            myParamArray[1].Value = endtime;
                            command.Parameters.Add(myParamArray[1]);
    
                            for (int j = 2; j < alr.GetLength(0) + 2; j++)
                            {
                                string ccStr = @":" + alr[j - 2, 0];
                                myParamArray[j] = new OracleParameter(ccStr, OracleType.VarChar, 50);
                                myParamArray[j].Value = alr[j - 2, 1];
                                command.Parameters.Add(myParamArray[j]);
                            }
                        }
                        da.SelectCommand = command;
                        DataTable dt = new DataTable();
                        da.Fill(dt);
                        return dt;
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("異常" + e.Message);
                        return null;
                    }
                    finally
                    {
                        con.Close();
                    }
                }
    int arr = 0;
                string[,] array = new string[10, 2];
                string btime = "SBEGINDATE"; //时间参数  
                string dtime = "SENDDATE";  //时间参数
                string sql = string.Format(@"select * from people where 1=1");
                string sno = textBox1.Text.Trim();
                string sname = textBox2.Text.Trim();
                string sage = textBox3.Text.Trim();
                DateTime? beginDate = null;
                DateTime? endDate = null;
                if (this.dateTimePicker1.Checked==true)
                {
                    sql += string.Format(" and BTDATE>=to_date(to_char(:SBEGINDATE,'YYYY/MM/DD hh24:mi:ss'),'yyyy/MM/dd HH24:mi:ss')");
                    beginDate = dateTimePicker1.Value;
                }
    
                if (this.dateTimePicker2.Checked == true)
                {
                    sql += string.Format(" and BTDATE<=to_date(to_char(:SENDDATE,'YYYY/MM/DD hh24:mi:ss'),'yyyy/MM/dd HH24:mi:ss')");
                    endDate = dateTimePicker2.Value;
                }
                if (sno != "")
                {
                    sql += string.Format(" and SNO =:SNO");
                    array[arr, 0] = "SNO";
                    array[arr, 1] = sno;
                    arr++;
                }
                if (sname != "")
                {
                    sql += string.Format(" and SNAME=:SNAME");
                    array[arr, 0] = "SNAME";
                    array[arr, 1] = sname;
                    arr++;
                }
                if (sage != "")
                {
                    sql += string.Format(" and SAGE=:SAGE");
                    array[arr, 0] = "SAGE";
                    array[arr, 1] = sage;
                    arr++;
                }
                MyMothed mySel = new MyMothed();
                dataGridView1.DataSource = mySel.XxSelect(sql, beginDate, endDate, array, btime, dtime);

    附注:是否提高查詢速度,減輕DB服務器負擔,還需實際上線觀察。

  • 相关阅读:
    Oracle 12C ORA-65096: 公用用户名或角色名无效
    一张图记住PMP十大只是领域
    MAC系统升级后APACHE/MYSQL相关问题解决
    Mac配置Apache
    Android源码下载方法
    GIT 远程操作详解
    GIT 配置及常用命令
    安装Oracle-Redhat 5.4 64位
    近期工作计划
    新的起点
  • 原文地址:https://www.cnblogs.com/kuangxiangnice/p/4196414.html
Copyright © 2011-2022 走看看