OleDbCommand使用参数应该注意的地方

OleDbCommand使用参数应该注意的地方最近写程序用到OleDbCommand的Parameter写数据库,遇到很多问题:1、OLEDB.NETFramework数据提供程序和ODBC.NETFramework数据提供程序不支持用于将参数传递到SQL语句或存储过程的命名参数。在此情况下,必须使用问号(?)占位符,如以下示例所示。SELECT*FROMCustomersWHERECustomerID

大家好,又见面了,我是你们的朋友全栈君。

最近写程序用到OleDbCommand的Parameter写数据库,遇到很多问题:

1、OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序不支持用于将参数传递到 SQL 语句或存储过程的命名参数。在此情况下,必须使用问号 (?) 占位符,如以下示例所示。SELECT * FROM Customers WHERE CustomerID = ?

2、将参数用于OleDbCommand 或 OdbcCommand 时,向 Parameters 集合中添加参数的顺序必须与存储过程中所定义的参数顺序相匹配。OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序将存储过程中的参数视为占位符,并且将按顺序使用这些参数值。另外,返回值参数必须是添加到 Parameters 集合中的第一批参数。
因此,向 Parameters 集合添加 Parameter 对象的顺序必须直接对应于该参数的问号占位符的位置 

例如:

                string sql = “insert into T_Fundratesum(fundcode,yhcode,sumdate,period,m12brate,m12rrate,createtimestamp) values (?,?,?,?,?,?,?)”;
                OleDbCommand comm = new OleDbCommand(sql, conn);
                comm.Parameters.Add(new OleDbParameter(“@fundcode”, OleDbType.VarChar));
                comm.Parameters[0].Value = dt.Rows[i][“yhcode”].ToString();
                comm.Parameters.Add(new OleDbParameter(“@yhcode”, OleDbType.VarChar));
                comm.Parameters[1].Value = dt.Rows[i][“fundcode”].ToString();
                comm.Parameters.Add(new OleDbParameter(“@sumdate”, OleDbType.Date));
                comm.Parameters[2].Value = DateTime.Now.ToString();
                comm.Parameters.Add(new OleDbParameter(“@PERIOD”, OleDbType.Double));
                comm.Parameters[3].Value = dt.Rows[i][“PERIOD”];
                comm.Parameters.Add(new OleDbParameter(“@M12BRATE”, OleDbType.Double));
                comm.Parameters[4].Value = dt.Rows[i][“M12BRATE”];
                comm.Parameters.Add(new OleDbParameter(“@M12RRATE”, OleDbType.Double));
                comm.Parameters[5].Value = dt.Rows[i][“M12RRATE”];
                comm.Parameters.Add(new OleDbParameter(“@createtimestamp”, OleDbType.VarChar));
                comm.Parameters[6].Value = DateTime.Now.ToString();

当然还有最笨的办法就是,定义一个字符串,然后将其里面的参数用string.replace替换。

我从网上查到一个网友的回复如下:我想应该是这样的

1.SqlCommand should be ‘@’ character
2.OleDbCommand or OdbcCommand should be ‘?’ character
3.OracleCommand should be ‘:’ character

唉,这些Command的不便利性使得用户在使用时常常摸不到头脑,不同的command有不同的参数格式设置,以后应该多多注意。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144402.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月19日 下午5:00
下一篇 2022年5月19日 下午5:00


相关推荐

  • CentOS7安装VMware Tools

    CentOS7安装VMware ToolsCentOS7安装VMwareTools的具体步骤如下:一、准备工作点击VMware菜单栏【虚拟机】,选择【安装VMwareTools】;如果安装了早期版本的VMwareTools,则菜单项为[更新VMwareTools]查看【虚拟机>设置>硬件>CD/DVD】是否已装载CD虚拟驱动器,如下图二、检查系统是否挂载成功在虚拟机中,以root身份登录客…

    2022年5月26日
    54
  • 浅谈Mock测试

    浅谈Mock测试一、Mock测试的定义 Mock就是在测试过程中,对于一些不容易构造/获取的对象,创建一个Mock对象来模拟对象的行为 二、Mock测试的作用 1、为什么要做Mock: 在对代码进行单元测试过程中,经常会有以下的情况发生: classA依赖classB和classC classD依赖classC和classE classB依赖…..

    2022年6月20日
    40
  • 好消息!谷歌宣布将于二季度发布ARM64 Linux版Chrome浏览器

    好消息!谷歌宣布将于二季度发布ARM64 Linux版Chrome浏览器

    2026年3月17日
    2
  • ntp协议详解_ntp端口号能否被修改

    ntp协议详解_ntp端口号能否被修改NTP客户端的代码实现

    2022年10月11日
    8
  • PetaLinux学习笔记 2

    PetaLinux学习笔记 2现在遇到这样一个问题,没有USB,甚至于USB都没有电压输出,检查电路,USB供电是由一个TPS2051BDBV来控制的,这个芯片又是USB3320C来控制的,说明这个芯片没有工作。官方的例子是可以正常工作的。我仔细查看教程,找到了被我忽略掉的一个内核文件:linux-xlnx-xilinx-v2017.4.tar.gz。这个文件既然由官方提供,那一定是有改动在里面的。黑金在打包这个目录的时候,…

    2025年10月30日
    3
  • 白话空间统计番外:再谈莫兰指数(Moran’s I)

    白话空间统计番外:再谈莫兰指数(Moran’s I)经典相关性分析是两条数据(属性维度)之间的相互依赖关系,那么空间自相关就是在空间范围内的相互依赖程度。全局的莫兰指数就是用来衡量空间自相关程度的。在ArcGIS的工具集里面,这个工具干脆就直接叫做“空间自相关”(SpatialAutocorrelation(GlobalMoran’sI))。

    2022年6月25日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号