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
('', '劉晨', '女', '', '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
('', '王敏', '女', '', '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
('', '張力', '男', '', '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
('', '小趙', '男', '', '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
('', '李勇', '男', '', '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
('', '小翠', '男', '', '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 = ;
for (int i = ; i < array.GetLength(); i++)
{
if (array[i, ] != null)
{
count++;
}
}
ArrayList al = new ArrayList();
ArrayList ar = new ArrayList();
for (int i = ; i < count; i++)
{
if (array[i, ] != string.Empty)
{
al.Add(array[i, ]);
ar.Add(array[i, ]);
}
}
string[,] alr = new string[al.Count, ];
for (int m = ; m < alr.GetLength(); m++)
{
alr[m, ] = (string)al[m];
alr[m, ] = (string)ar[m];
}
try
{ //變量賦值
con.Open();
OracleParameter[] myParamArray = new OracleParameter[alr.Length + ];
OracleCommand command = new OracleCommand(sql, con);
OracleDataAdapter da = new OracleDataAdapter();
string ccBTime = @":" + btime;
string ccDTime = @":" + dtime;
if (begintime==null && endtime==null)
{
for (int j = ; j < alr.GetLength(); j++)
{
string ccStr = @":" + alr[j, ];
myParamArray[j] = new OracleParameter(ccStr, OracleType.VarChar, );
myParamArray[j].Value = alr[j, ];
command.Parameters.Add(myParamArray[j]);
}
}
if (begintime != null && endtime == null)
{
myParamArray[] = new OracleParameter(ccBTime, OracleType.DateTime);
myParamArray[].Value = begintime;
command.Parameters.Add(myParamArray[]);
for (int j = ; j < alr.GetLength() + ; j++)
{
string ccStr = @":" + alr[j - , ];
myParamArray[j] = new OracleParameter(ccStr, OracleType.VarChar, );
myParamArray[j].Value = alr[j - , ];
command.Parameters.Add(myParamArray[j]);
}
}
if (begintime == null && endtime != null)
{
myParamArray[] = new OracleParameter(ccDTime, OracleType.DateTime);
myParamArray[].Value = endtime;
command.Parameters.Add(myParamArray[]);
for (int j = ; j < alr.GetLength() + ; j++)
{
string ccStr = @":" + alr[j - , ];
myParamArray[j] = new OracleParameter(ccStr, OracleType.VarChar, );
myParamArray[j].Value = alr[j - , ];
command.Parameters.Add(myParamArray[j]);
}
}
if (begintime != null && endtime != null)
{
myParamArray[] = new OracleParameter(ccBTime, OracleType.DateTime);
myParamArray[].Value = begintime;
command.Parameters.Add(myParamArray[]);
myParamArray[] = new OracleParameter(ccDTime, OracleType.DateTime);
myParamArray[].Value = endtime;
command.Parameters.Add(myParamArray[]); for (int j = ; j < alr.GetLength() + ; j++)
{
string ccStr = @":" + alr[j - , ];
myParamArray[j] = new OracleParameter(ccStr, OracleType.VarChar, );
myParamArray[j].Value = alr[j - , ];
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 = ;
string[,] array = new string[, ];
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, ] = "SNO";
array[arr, ] = sno;
arr++;
}
if (sname != "")
{
sql += string.Format(" and SNAME=:SNAME");
array[arr, ] = "SNAME";
array[arr, ] = sname;
arr++;
}
if (sage != "")
{
sql += string.Format(" and SAGE=:SAGE");
array[arr, ] = "SAGE";
array[arr, ] = sage;
arr++;
}
MyMothed mySel = new MyMothed();
dataGridView1.DataSource = mySel.XxSelect(sql, beginDate, endDate, array, btime, dtime);

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

C#在sql中使用變量訪問Oracle數據庫的更多相关文章

  1. 在Android中afinal框架下實現sqlite數據庫版本升級的辦法

    public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version) 這個方法在實現時需要重寫.   pub ...

  2. PowerDesigner导出的sql中去掉双引号,主要用于Oracle

    如题,这些双引号对于Oracle建表实在是糟糕透了: 解决方法: (转载,作者的百度已经挂了,无法放上链接,自私一把,以前的Oracle项目不见了,无法展示) 1.去掉Oracle生成的SQL创建语句 ...

  3. SQL中rowcount与@@rowcount

    rowcount的用法: rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, select * from 表A 这样的查询只会返回表A中的前10条数据.它和 ...

  4. sql 中convert和cast区别

    SQL中的cast和convert的用法和区别 更多 来源:SQL学习浏览量: 学习标签: cast convert sql 本文导读:SQL中的cast 和convert都是用来将一种数据类型的表达 ...

  5. java中的泛型和sql中的索引

    sql中的索引 索引:好处查询的速度快,被删除,修改,不会对表产生影响,作用是加速查询: 一种典型的数据库对象 作用:提交数据的查询效率,尤其对一些数据量很大的表 索引是用来为表服务的 索引是orac ...

  6. Python 基礎 - 變量

    變量 變量主要是用來存東西,是存在內存裡 Python 變量寫法: name = "Nobody One" Shell Script 變量寫法: name="Nobody ...

  7. GO語言基礎教程:數據類型,變量,常量

    GO類似PHP,每行的結尾要加分號來結束,不同點在於GO對此並不強制,這一點又像javascript,另外GO的語句塊是用一對大括號來包裹的,但是go要求左大括號必須要在語句的結尾處,不能在行首出現左 ...

  8. 在BSP的.bat文件下設置全局變量方法

    用于多個產品共用一個BSP的時候,在BSP的.bat文件中設置全局變量,去掉不需要加載的驅動和不同點是很好的方法. 一,舉例:BSP中.bat的一段code: set BSP_SMDK2443=1 s ...

  9. sql中对查询出来的数据进行分页

    当sql中存储的数据量比较大时,在web中 数据显示时都会对数据进行分页,分页不会在客户端进行分页,而是在数据库查询过程中进行了分页. sql代码: DECLARE @pageindex INT; - ...

随机推荐

  1. poj2154Color polya定理+欧拉函数优化

    没想到贱贱的数据居然是错的..搞得我调了一中午+晚上一小时(哦不d飞LJH掉RP毕竟他是BUFF)结果重判就对了五次.. 回归正题,这题傻子都看得出是polya定理(如果你不是傻子就看这里),还没有翻 ...

  2. YTU 1098: The 3n + 1 problem

    1098: The 3n + 1 problem 时间限制: 1 Sec  内存限制: 64 MB 提交: 368  解决: 148 题目描述 Consider the following algor ...

  3. golang中获取字符串长度的几种方法

    一.获取字符串长度的几种方法   - 使用 bytes.Count() 统计   - 使用 strings.Count() 统计   - 将字符串转换为 []rune 后调用 len 函数进行统计   ...

  4. Persisting Data to the Device

    Persisting Data to the Device Edit PagePage History Overview The Android framework offers several op ...

  5. aapt的常用命令

    1. 列出apk包的内容 aapt l[ist] [-v] [-a] file.{zip,jar,apk} -v 以table形式列出来 -a 详细列出内容 例如:aapt l <你的apk文件 ...

  6. 转3xian之所在 (一位ACM大牛的博文)

    3xian的经历和见解...我深思... 最后一天,漫天飘起了雪花,假装欢送我离去. 这次WF之战不太顺利,早期的C题大概花了1秒钟构思,然而由于输出格式多了一个空格直到两个半小时才逃脱Wrong A ...

  7. Vue.js:安装node js到构建一个vue并启动它

    ylbtech-Vue.js:从安装node js到构建一个vue并启动它 1.返回顶部 1. 1.安装node js 下载地址:http://nodejs.cn/download/2.安装完成后运行 ...

  8. [App Store Connect帮助]八、维护您的 App(4.1)监控顾客评论:评分与评论概述

    App Store 上的评分与评论 顾客可以按照 1 星至 5 星的级别对您的 App 进行评分.顾客还可为您的 iOS 和 macOS App 撰写评论,但无法为 Apple TVOS App 撰写 ...

  9. 原生js一行代码实现简易轮播图

    这是一个简易的js无限循环轮播图,只用了一行js代码就实现了无限循环,记录一下三目运算符的伟大! <!DOCTYPE html><html lang="en"&g ...

  10. Linux之旅第一篇-目录结构及操作目录

    一.引言 Linux对java开发来说也是一项必备的技能,因为项目基本都是部署在Linux操作系统的服务器中,虽然项目不一定需要我们去部署,但不管是自己测试环境部署,还是一些生产环境中日志的查看,Li ...