精华内容
下载资源
问答
  • 当你是使用参数化查询时为参数赋值时,...错参数化查询 '(@a varchar(100)....' 需要参数 '@a',但未提供该参数 只是因为你给a的值为null,而数据库中的null(空)是System.DBNull 类型的不是同一类。所以在插


      当你是使用参数化查询时为参数赋值时,比如command.Parameters.Add("@a",SqlDbType.Text,30).Value=a;当a=null是将报错:

    错参数化查询 '(@a varchar(100)....' 需要参数 '@a',但未提供该参数


    只是因为你给a的值为null,而数据库中的null(空)是System.DBNull 类型的不是同一类。所以在插入空的时候要用DBNull,而不是null,

    所以可以这样改:

    command.Parameters.Add("@a",SqlDbType.Text,30).Value=a ?? DBNull.Value;

    ?? :?? 运算符称作 null 合并运算符。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。

    但是还是会报下面的错误。


    解决方法:

      很简单只要在后面加上 ToString()就好了;

    如下

    command.Parameters.Add("@a",SqlDbType.Text,30).Value=a ?? DBNull.Value.ToString();

    展开全文
  • 当你是使用参数化查询时为参数赋...当a=null是将报错: 错参数化查询 '(@a varchar(100)....' 需要参数 '@a',但未提供该参数 只是因为你给a的为null,而数据库中的null(空)是System.DBNull 类 当你是使用参
    当你是使用参数化查询时为参数赋时,比如command.Parameters.Add(@a,SqlDbType.Text,30).Value=a;当a=null是将报错: 错参数化查询 '(@a varchar(100)....' 需要参数 '@a',但未提供该参数 只是因为你给a的为null,而数据库中的null(空)是System.DBNull 类

    当你是使用参数查询时为参数赋值时,比如command.Parameters.Add("@a",SqlDbType.Text,30).Value=a;当a=null是将报错:

    错参数化查询 '(@a varchar(100)....' 需要参数 '@a',但未提供该参数

    只是因为你给a的值为null,而数据库中的null(空)是System.DBNull 类型的不是同一类。所以在插入空的时候要用DBNull,而不是null,

    所以可以这样改:

    command.Parameters.Add("@a",SqlDbType.Text,30).Value=a ?? DBNull.Value; 

    ?? :?? 运算符称作 null 合并运算符。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。

    但是还是会报下面的错误。

    \


    解决方法:

    很简单只要在后面加上 ToString()就好了;

    如下

    command.Parameters.Add("@a",SqlDbType.Text,30).Value=a ?? DBNull.Value.ToString(); 
    


     

     

    展开全文
  • string sql; sql = "insert into jianli(username,password,name,sex,major,xueli,phone,home,jieshao,age,mail,yixiang,jingli)"; sql += " values (@username,@password,@name,@sex,@major,@xueli,@phone,@...
  •  在.NET或者C#中,我们一般执行sql语句的话,推荐使用参数化查询,这样可以避免sql注入的攻击,但是,我在使用参数化查询的时候 出现了以下的错误,详细如下图: 图一这是写sql语句参数化查询的代码 图2...

    1、问题的来源

     在.NET或者C#中,我们一般执行sql语句的话,推荐使用参数化查询,这样可以避免sql注入的攻击,但是,我在使用参数化查询的时候

    出现了以下的错误,详细如下图:

      图一这是写sql语句参数化查询的代码

     

     

      图2 这是MSSQL执行的sql语句

     

    2、问题的原因

      出现这种错误的原因在于,在参数化查询的时候,有几个参数的值为null,这样的话,就出现了如图2所示的错误。

    为啥会这样了??

    虽然参数的值就是为null,传入数据库中就必须变成DbNull.Value
    因为此null为c#的,而DbNull.Value才是数据库中的null
    那为什么会报错呢?
    因为你是传入参数啊,如果你给参数@nickname赋值为null,相当于没赋,因为cmd.Parameters[nickname].Value的默认值就是null,而不是DbNull.Value 。

    3、如何解决问题(以下不是唯一方法)
      public object CheckIsNull(object obj)    //此方法判断要传递的参数是否为null, 如果为Null, 则返回值DBNLL.Value,主要用户网数据库添加或者更新数据
            {
                if(obj==null)
                {
                    return DBNull.Value;
                }
                else
                {
                    return obj;
                }
            }

      public object CheckIsDbNull(object obj)    //此方法是从数据库中读取数据,如果数据库中的数据为DBNull.Value, 则返回null
            {
                if(Convert.IsDBNull(obj))
                {
                    return null;
                }
                else
                {
                    return obj;
                }
            }
     

     

    DBNULL 与NULL的区别

    Null是.net中无效的对象引用。

    DBNull是一个类。DBNull.Value是它唯一的实例。它指数据库中数据为空(<NULL>)时,在.net中的值。

    null表示一个对象的指向无效,即该对象为空对象。

    DBNull.Value表示一个对象在数据库中的值为空,或者说未初始化,DBNull.Value对象是指向有效的对象。

    DBNull在DotNet是单独的一个类型 System.DBNull 。它只有一个值 DBNull.Value 。DBNull 直接继承 Object ,所以 DBNull 不是 string , 不是 int , 也不是 DateTime 。。。

    但是为什么 DBNull 可以表示数据库中的字符串,数字,或日期呢?原因是DotNet储存这些数据的类(DataRow等)都是以 object 的形式来储存数据的。

    对于 DataRow , 它的 row[column] 返回的值永远不为 null , 要么就是具体的为column 的类型的值 。要么就是 DBNull 。 所以 row[column].ToString() 这个写法永远不会在ToString那里发生NullReferenceException,但有可能抛下标越界的异常。

    DBNull 实现了 IConvertible 。 但是,除了 ToString 是正常的外,其他的ToXXX都会抛出不能转换的错误。

    在 IDbCommand(OleDbCommand,SqlCommand...) 的ExecuteScalar的返回值中,情况可以这样分析:

    select 1 这样返回的object是 1

    select null 这样返回的是DBNull.Value

    select isnull(null,1) 返回的是 1

    select top 0 id from table1 这样返回的值是null

    select isnull(id,0) from table1 where 1=0 返回的值是null

    这里 ExecuteScalar 的规则就是,返回第一列,第一行的数据。如果一行都没有,那么ExecuteScalar就返回null。如果有第一行,但是第一列为空,那么返回的是 DBNull 。如果第一列第一行不为空,那么ExecuteScalar就直接对应的DotNet的值。

    规则就是这样的。这里容易犯的一个错误是,把ExecuteScalar返回DBNull与null的情况混淆,例如:

    string username=cmd.ExecuteScalar().ToString();

    除非你认为cmd执行后,肯定至少有一行数据,否则这里就会出错。

    又或者 select id from usertable where username=@name 这样的sql语句,如果找不到记录,那么ExecuteScalar则会返回null,所以千万不要

    int userid=Convert.ToInt32(cmd.ExecuteScalar());

    或者你会这样写 SQL 语句:select isnull(id,0) from usertable where username=@name

    但是 int userid=Convert.ToInt32(cmd.ExecuteScalar()); 依然会出错,因为上面的语句不成立时,仍然是不返回任何行。

    对于IDbDataParameter(OleDDbParameter,SqlParameter..)的Value,如果为null,则代表该参数没有指定,或者是代表DEFAULT。如果为DBNull.Value,则代表SQL中的NULL

    所以,如果你要调用存储过程,里面有默认参数 @val nvarchar(20)="C" , 

    那么cmd.Parameters["@val"].Value=null 代表使用这个默认的 "C"

    而cmd.Parameters["@val"].Value=DBNull.Value 代表使用NULL来传给 @val

    你可以用Convert.IsDBNull来判断一个值是否DBNull。注意Convert.IsDBNull(null)是false,也就是说null跟DBNull.Value是不等的。

     

    转载于:https://www.cnblogs.com/luoyangcn/p/4451866.html

    展开全文
  •  使用上述格式给每个参数赋值 ..., goodModel.Content, goodModel.State,    // goodModel.Orderid,goodModel.Createdate;    SqlCommand com =  new   SqlCommand(sql, con);   ...

       SqlConnection con = new SqlConnection("server=(local);Integrated Security=True;database=varatis");
        SqlParameter[] str = new SqlParameter[]{
          new SqlParameter("@name",SqlDbType.VarChar,50),
          new SqlParameter("@price", SqlDbType.Int),
          new SqlParameter("@image", SqlDbType.Image),
          new SqlParameter("@content", SqlDbType.VarChar,200),
          new SqlParameter("@state", SqlDbType.Int),
          new SqlParameter("@orderid", SqlDbType.Int),
          new SqlParameter("@createdate", SqlDbType.DateTime)};
     
        // ---- 以下修改需要为:
        string sql = "insert into goods(name,price,image,content,state,orderid,createdate)   values  (@name,@price,@image,@content,@state,@orderid,@createdate)";
        str[0].Value = goodModel.Name;
        str[1].Value = goodModel.Price;
        str[2].Value = goodModel.Image;
        // ... 使用上述格式给每个参数赋值 ..., goodModel.Content, goodModel.State, 
        // goodModel.Orderid,goodModel.Createdate;       
        SqlCommand com = new SqlCommand(sql, con);
        com.Parameters.AddRange(str);
        con.Open();
        int result = com.ExecuteNonQuery();
        con.Close();
        return result;
        // ---- OK

    展开全文
  • 问题描述: 问题原因: 1.UI层没有相关参数 2.参数拼写错误 3.制杖一般的把参数注释了(就比如我)。 解决方案: 1.找出缺少的参数,补齐 2.把注释去掉。   over over...
  • 出现这种错误的原因在于,在参数化查询的时候,有几个参数的值为Null,这样的话,就出现了如图所示的错误。 虽然参数的值就是为Null,传入数据库中就必须变成DbNull.Value 因为此null为C#的,而DbNull.Value才是...
  • 我用DW写的一个ASP注册页面,在将注册信息插入到数据库中的时候出现戳无,“参数化查询 '(@P1 text,@P2 text,@P3 text,@P4 text,@P5 nvarchar(50),@P6 text,@' 需要参数 '@P1,没有提供该参数”。。。弄了几...
  • 方法如下: string sql = @"update Finance_RefundList set ... {"参数化查询 '(@ProductNumber nvarchar(1),@RefundMoney decimal(6,4),@Refund_Id' 需要参数 '@Enable',但未提供该参数。"} 求帮助呀~
  • “过程或函数XXX需要XXX参数,但未提供该参数”,这到底是怎么回事呢?是什么问题引起的? 出现这个错误一般会由以下几种情况引起: 1.程序中传入参数与已定义的存储过程或函数的参数个数或名称不符; 2.没有对传入...
  • 本菜鸟刚接触c#,下午报了个错误是 参数化查询 ,@customerType' 需要参数 ,但未提供该参数.
  • 在写一个相册的网站时,出现了如题所述的错误,其中对“@scanType”参数进行赋值的源代码如下:  SqlParameter para = new SqlParameter("@scanType", (int)ScanType.所有人);  ScanType为枚举,定义如下: ...
  • [color=#FF0000]参数化查询 '(@Name nvarchar(3),@TelPhone nvarchar(7),@MobilePhone nvarchar(4' 需要参数 '@TypeNum',但未提供该参数。[/color] 各位高手求帮帮我,弄了一下午,没搞定,不知道哪里错了。...
  • 其他信息: 参数化查询 '(@ID int,@Name nvarchar(4000)) INSERT INTO table_test(FID,FName) ' 需要参数 @Name,但未提供该参数。   原因:通过跟踪工具发现在服务端变成如下SQL语句, exec sp_...
  • 我们往数据库表中添加一行数据的时候,数据库允许某一列为空,但是实际案例操作添加的时候,会遇到一些问题,比如下图。这样,我们就需要做一些处理。 这个两种修改方式 : 第一种: 在方法体中,实体类赋值时...
  • System.Data.SqlClient.SqlException:“参数化查询 '(@name nvarchar(4000))select * from Admin where UserName=@name' 需要参数 '@name',但未提供该参数。” 报了一天的这个错 头都弄大了!!!!求大佬解决
  • 需要参数 '@',但未提供该参数

    千次阅读 2012-12-04 14:00:06
    遇到错误 参数化查询 '(@cId int,@cate int,@code nvarchar(7),@name ...需要参数 '@memberSale',但未提供该参数。  在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakCon
  • //数据库访问根据操作返回结果 ...System.Data.SqlClient.SqlException: 参数化查询 '(@no char(50),@name varchar(50),@sex char(50),@birthDay datetime' 需要参数 '@address',但未提供该参数
  • 我在文章,评论,回复页面的上面使用DW制作了折叠页,在折叠页里做了文章提交表单,测试使用文章提交后出现这种情况,请问这是什么原因引起的错误,怎么纠正?我是菜鸟,麻烦详细给予指点,非常感谢!...
  • 参数化查询 '(@ActivityID nvarchar(4000))SELECT ActivityInfoEx.ActivityInfoEx' 需要参数 '@ActivityID',但未提供该参数。 但是我没有设置任何关于permiss的限制.查看UCML的设置.看到有如下checkbox被勾选了. ...
  • (一)参数化查询需要参数,但未提供该参数。 1.问题: 2.错误原因:D层内容和E层内容不一致 在D层多写了"level"和“username”,而E层只用到了“userID”“pwd”. 3.解决方案:如下图,将多写的"level...
  • 该参数是构成某个例程的总 SGA 要求的若干参数之一。 默认值 : 派生: SESSIONS 参数的值 (如果正在使用共享服务器体系结构); 否则为 0。 Mts_multiple_listeners: 说明: 指定多个监听程序的地址是分别指定的, ...
  • 3.C#中参数化查询 '(@PERSONAL_PHOTO image,@SURNAME nvarchar(4000),@MIN_NAME nvarcha' 需要参数 '@PASSPORT',但未提供该参数。 问题描述 出现问题原因 解决方案 4.在从数据库获取图片数...
  • 1、参数化查询 '(@Work_ID nvarchar(32),@Site_ID nvarchar(4000),@Params_ID nvarch' 需要参数 '@Site_ID',但未提供该参数。 这个问题我遇见过很多次,原因只有一个,我觉得报这个错的重点是“”@Site_ID ...
  • 不支持 SFDP 怎么办 :如果 Flash 不支持 SFDP 标准,SFUD 会查询配置文件 ( /sfud/inc/sfud_flash_def.h ) 中提供的 Flash 参数信息表 中是否支持款 Flash。如果不支持,则可以在配置文件中添加款 Flash 的...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 176
精华内容 70
关键字:

参数化查询但未提供该参数