我需要将下面的代码封装起来,请大神指点!!!

YBMiss 2016-01-23 04:33:22
public static void Ora(int recc)
{
string connectStr = "";
OracleConnection conn = new OracleConnection(connectStr);
OracleCommand command = new OracleCommand();
command.Connection = conn;
command.CommandText = "insert into dept values(:deptno, :deptname, :loc)";
conn.Open(); //下面定义几个数组,分别表示三个字段,数组的长度由参数直接给出
int[] deptNo = new int[recc];
string[] dname = new string[recc];
string[] loc = new string[recc];
// 为了传递参数,不可避免的要使用参数,下面会连续定义三个
OracleParameter deptNoParam = new OracleParameter("deptno", OracleDbType.Int32);
deptNoParam.Direction = ParameterDirection.Input;
deptNoParam.Value = deptNo;
command.Parameters.Add(deptNoParam);
OracleParameter deptNameParam = new OracleParameter("deptname", OracleDbType.Varchar2);
deptNameParam.Direction = ParameterDirection.Input;
deptNameParam.Value = dname;
command.Parameters.Add(deptNameParam);
OracleParameter deptLocParam = new OracleParameter("loc", OracleDbType.Varchar2);
deptLocParam.Direction = ParameterDirection.Input;
deptLocParam.Value = loc;
command.Parameters.Add(deptLocParam);
}
主要是标红色的这段,我应该怎么把数据类型传进来?
我开始的想法是在数据库中查找了一张表,查出了表中列的数据类型,但不知道应该怎么传进去
...全文
192 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果你是使用到专门针对 Oracle 的特性,它跟 ADO.NET 的通用特性不同,可能你需要另外开发一个 OracleSQLHelper。 要注意,设计类库是从应用的“创意”出发的,而不是从拼凑出发。这样才能看到希望。 例如你可能看到一些SQLHelper 中总是以 DbParameter[ ]、SqlParameter[ ]为输入参数,那么这其实就根本没有解决“封装”问题,或者说它就是一个非常低级的封装。 而如果从应用的创意出发,每当遇到新的需求都知道要重构,就能想到你自己需要使用
command.AddParameter("deptno", deptNo);
这样的简洁的方法接口来封装,再来看看你所看到的SQLHelper,就能分辨出那些 SQLHelper 的差距来了。 当一些现成的工具框架不好用,你可以自己动手封装甚至发布,改进那些比较垃圾的框架。
江南小鱼 2016-01-24
  • 打赏
  • 举报
回复
找个SQLHelper,学习下怎么封装的吧。
  • 打赏
  • 举报
回复
例如你可以写
ommand.SetParameter("deptno", 1234);
来为command设置一个命名参数及其值。 你可以扩展此Helper,例如
public static void SetParameter(this DbCommand cmd, string name, object value, DbType? type=null , ParameterDirection? direct = null )
{
    var p = cmd.CreateParameter();
    p.ParameterName = name;
    p.Value = value;
    if (type.HasValue)
        p.DbType = type.Value;
    if (direct.HasValue)
        p.Direction = direct.Value;
    cmd.Parameters.Add(p);
}
代码一点都不重要,重要的是你是否理解 ADO.NET 的架构。这里可以看出,整个ADO.NET都是一个抽象的体系,这段代码可以适合所有 ADO.NET,而不仅仅包括其中的 Oracle 分支。
  • 打赏
  • 举报
回复
例如(只是举例),你可以将常量值跟目标混合起来,例如
public static class MySqlHelper
{
         public static void SetParameter(this DbCommand cmd, string name, object value)
        {
            var p = cmd.CreateParameter();
            p.ParameterName = name;
            p.Value = value;
            cmd.Parameters.Add(p);
        }

        ..............
}
全栈极简 2016-01-23
  • 打赏
  • 举报
回复
你需要一个SQLHelper类,例如:http://www.cnblogs.com/sufei/archive/2010/01/14/1648026.html

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧