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
('', '劉晨', '女', '', '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數據庫的更多相关文章
- 在Android中afinal框架下實現sqlite數據庫版本升級的辦法
public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version) 這個方法在實現時需要重寫. pub ...
- PowerDesigner导出的sql中去掉双引号,主要用于Oracle
如题,这些双引号对于Oracle建表实在是糟糕透了: 解决方法: (转载,作者的百度已经挂了,无法放上链接,自私一把,以前的Oracle项目不见了,无法展示) 1.去掉Oracle生成的SQL创建语句 ...
- SQL中rowcount与@@rowcount
rowcount的用法: rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, select * from 表A 这样的查询只会返回表A中的前10条数据.它和 ...
- sql 中convert和cast区别
SQL中的cast和convert的用法和区别 更多 来源:SQL学习浏览量: 学习标签: cast convert sql 本文导读:SQL中的cast 和convert都是用来将一种数据类型的表达 ...
- java中的泛型和sql中的索引
sql中的索引 索引:好处查询的速度快,被删除,修改,不会对表产生影响,作用是加速查询: 一种典型的数据库对象 作用:提交数据的查询效率,尤其对一些数据量很大的表 索引是用来为表服务的 索引是orac ...
- Python 基礎 - 變量
變量 變量主要是用來存東西,是存在內存裡 Python 變量寫法: name = "Nobody One" Shell Script 變量寫法: name="Nobody ...
- GO語言基礎教程:數據類型,變量,常量
GO類似PHP,每行的結尾要加分號來結束,不同點在於GO對此並不強制,這一點又像javascript,另外GO的語句塊是用一對大括號來包裹的,但是go要求左大括號必須要在語句的結尾處,不能在行首出現左 ...
- 在BSP的.bat文件下設置全局變量方法
用于多個產品共用一個BSP的時候,在BSP的.bat文件中設置全局變量,去掉不需要加載的驅動和不同點是很好的方法. 一,舉例:BSP中.bat的一段code: set BSP_SMDK2443=1 s ...
- sql中对查询出来的数据进行分页
当sql中存储的数据量比较大时,在web中 数据显示时都会对数据进行分页,分页不会在客户端进行分页,而是在数据库查询过程中进行了分页. sql代码: DECLARE @pageindex INT; - ...
随机推荐
- 基于TINY4412的Andorid开发-------简单的LED灯控制【转】
本文转载自:http://www.cnblogs.com/pengdonglin137/p/3857724.html 基于TINY4412的Andorid开发-------简单的LED灯控制 阅读 ...
- web前端技术社区分享
web前端技术社区分享 一.国外的前端技术网站: 1. 名称:W3C: 网址:http://www.w3.org/ 理由:前端技术的规范标准几乎都是W3C制定的 2.名称:ECMA 网址:ht ...
- I.MX6 Android stlport 使用
/****************************************************************** * I.MX6 Android stlport 使用 * 说明: ...
- BZOJ2049:Cave 洞穴勘测 (LCT入门)
辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可 ...
- 【SCOI 2005】 最大子矩阵
[题目链接] 点击打开链接 [算法] 动态规划 我们发现,M只有两种取值,1和2,那么,只需分类讨论即可 当M = 1时,其实这个问题就成了就最大连续子段和的问题,只不过要选K段而已 用f[i][j] ...
- 使用expdp的心得
第一步:首先使用DBA权限的用户创建directory,我使用system ,可以在服务器本地创建,也可以远程连接sqlplus进行创建,使用的将是服务器上面的路径.要确保创建directory时,操 ...
- FLASH OTP
OTP 软件加密运用参考 为了防止软件被他人盗用,spansion flash给每个芯片植入了代表身份的unique ID,增加了OTP扇区,目前我们可以运用这两个特性,来实现软件的加密保护.软件加密 ...
- bzoj4390
树上差分 感觉挺巧妙的... 每次更新就是在u,v上+1,x是lca(u,v),在x和fa[x]上-1,那么每个点的权值就是子树和,正确性yy一下就行了 不过树状数组的常数真是小,改成前缀和才快了20 ...
- 关于使用kafka时对于大数据消息体是遇到的问题
kafka对于消息体的大小默认为单条最大值是1M. 但是在我们应用场景中, 常常会出现一条消息大于1M, 如果不对kafka进行配置. 则会出现生产者无法将消息推送到kafka或消费者无法去消费kaf ...
- 【WIP】gollum
创建: 2018/03/18 [任务表]TODO 这个博客从来不点发布到首页, 完全100%自用, 全部详细完整的干货.千辛万苦找到这里看到一片空白, 是不是很愤怒? 那就对啦233333