SqlCommand

问题解决:SqlParameterCollection只接受非空的SqlParameter类型对象,不接受SqlParameter[]对象

分类: 三层架构 VB.net 机房收费系统(.net版) 2013-03-31 09:16 3876人阅读 评论(11) 收藏 举报

做.net个人版机房收费系统时,遇到了这样一个问题:

既然提到了SqlParameter,那就意味着设置参数处出现了问题,但是到底是哪 里出了问题呢,之前运行的时候也没有出错呀,怎么现在又出现了这样的错误。仔细研究提示的错误:只接受非空的SqlParameter类型对象。也就是说 我给函数传入的参数为空呗,但是自己的代码里明明传入了参数,怎么会提示传入的为空呢??那一定是没有传入成功;虽然调用的函数参数已对应“传入”,但是 没有识别。

网上查了这个问题,但都不符合我的错误,但是可以看出他们错误的共同点,就是我上面所说的SqlParameter类型参数传入不成功。

最后发现了我的问题所在:以下是我的代码

SqlHelper中的一个函数:

D层的函数SelectUser_DA()调用以上SqlHelper中的函数Executescalar():

问题出在SelectUser_DA(ByVal enUser As UserEntity)在调用 Executescalar(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paramete As SqlParameter())时,第三个参数没有传入,虽然在代码上看似传入了参数,但是在Executescalar()函数中并没有读入,问题在于 我第一次写的添加参数的代码:cmd.Parameters.Add(paramete),之后改 为 cmd.Parameters.AddRange(paramete),就正确了。

Why?

两个属性Add和AddRange的区别在哪里?

cmd.Parameters.Add():添加一个参数。增加多个参数时,需要使用一个Foreach循环;

cmd.Parameters.AddRange():添加一个参数的数组;

所以很明显了,我添加的是一个参数数组,所以用cmd.Parameters.Add()就出现错误了。

问题总结:细节决定成败,有时候学习还真的不能差不多,有时候研究很久,就差那么一点。

时间: 2024-11-01 10:19:53

SqlCommand的相关文章

SqlCommand.DeriveParameters failed

错误信息如下: SqlCommand.DeriveParameters failed because the SqlCommand.CommandText property value is an invalid multipart name "SELECT * from tableA", the current limit of "4" is insufficient. 错误原因: 使用Enterprise Library进行数据库操作时,如果直接使用sql 语句

SqlCommand学习

public sealed class SqlCommand : DbCommand, ICloneable sqlcommand命令,执行命令 例子: SqlCommand command = new SqlCommand(" insert into Table_1 values('2')", connection); int result= command.ExecuteNonQuery();

SqlCommand和SqlDataAdapter有什么区别

因为DataSet是离线的,所以SqlDataAdapter这个对象是连接DataSet和数据库的桥梁,所有对DataSet的操作(填充,更新等)都要通过他 ado.net数据访问有两种方式: 1.离线--通过DataSet,然后离线增,删,改,最后通过SqlDataAdapter解 析到数据库中 2.直接对数据库操作SqlCommand (Update,Insert,Delete) SqlCommand就是是命令了,可以用它来执行SQL命令 SqlDataAdapter就是数据适配器了,它是用

SqlConnection ,SqlTransaction,SqlCommand的常用法

using System; using System.Data; using System.Data.SqlClient; using System.Text; namespace ConsoleApplication1 { static class Test8 { static SqlConnection cn; static SqlTransaction tr; public static void Test() { string dbConnection = "data source=19

SqlCommand.ExecuteScalar 方法

本文来自:http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.100).aspx 执行查询,并返回查询所返回的结果集中第一行的第一列. 忽略其他列或行. 命名空间:  System.Data.SqlClient程序集:  System.Data(在 System.Data.dll 中) 语法 C# C++ F# VB public override Object E

【乱写代码坑人系列】小插曲(一)将类的所有属性添加为SqlCommand的参数

小插曲(一)将类的所有属性添加为SqlCommand的参数 在使用SqlCommand 执行存储过程时,如果存储过程需要参数,就必须将每个参数都输进去,虽然说可以使用AddWithValue 方法,但参数多时仍旧有些麻烦. 在需要将类的所有属性作为参数时,可以通过反射获取这个类所有的属性和值,并直接添加到参数中. 不过需要注意的是,必须保证类的属性名和参数名相同(不区分大小写),顺序无所谓. 1 private void SetSqlParameters<T>(SqlCommand cmd,

ADO.NET #3-1 (GridView + DataReader + SqlCommand)完全手写Code Behind

[C#] ADO.NET #3-1 (GridView + DataReader + SqlCommand)完全手写.后置程序代码 之前有分享过一个范例 [C#] ADO.NET #3 (GridView + SqlDataSource)完全手写.后置程序代码,兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法 后来,在网络上找到的人,就开始大量地为「SqlDataSource小精灵」动手写程序 这并非我的原意. 我的意思是,透过手写的程序代码

使用SQLCOMMAND以及SQLADAPERT 调用存储过程

使用SQLCommand调用的基本方法如下: SqlCommand comm = new SqlCommand("P_GetCompanyInfo", conn); comm.CommandType = CommandType.StoredProcedure; //使用参数化查询的方法像存储过程中传递参数 SqlParameter para = new SqlParameter("@Type", "1"); comm.Parameters.Add

积累——SQLCommand命令

SQLcommand表示要对SQL数据库运行的一个 T-SQL 语句或存储过程.以便运行大量操作或处理数据库结构. 在对数据库訪问的时候,就经经常使用到这个.看看它是怎么做到的吧! 一.属性 CommandText 获取或设置要对数据源运行的Transact-SQL语句或存储过程. CommandType 获取或设置一个值,该值指示怎样解释CommandText属性. CommandType.Text代表运行的是SQL语句 CommandType.StoreProcedure代表运行的是存储过程

SqlCommand.Parameters.add()方法

SqlParameter 类 表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射.无法继承此类. 命名空间:  System.Data.SqlClient 程序集:  System.Data(在 System.Data.dll 中) 举例 string strconn = "Data Source=xxx;user id=sa;pwd=;initial catalog=gltest";        SqlConnection Conn = new SqlCon