dsnotcheck=new DataSet();
dbp.Open();
SqlParameter[] parms= {
new SqlParameter("@MaterialCD",SqlDbType.NVarChar,100),
new SqlParameter("@VenderCD",SqlDbType.NVarChar,100)
};
parms[0].Value=cboMaterialCD.SelectedText;
parms[1].Value=cboVenderCD.SelectedText; dsnotcheck=dbp.OpenDataSet("sp_ProductPlan_ShowNoCheckInfo",parms);
------------------------------------------------
CREATE PROCEDURE sp_ProductPlan_ShowNoCheckInfo
@MaterialCD INT
 ,@VenderCD INT
AS
------------------------------------------------
疑问点:
1.SqlParameter和存储过程中的参数名是不是必须一样
2.SqlParameter定义参数时的顺序必须和存储过程中参数的顺序一致
3.把parms传入后,要执行的语句是怎样构造出来的
4.使用parms时的注意点?
我曾经碰到parms[x].Value赋值时出现 NULL ,执行sql就报错
例如: sp_ProductPlan_ShowNoCheckInfo 参数1,参数2,参数3
参数2赋值为空时,则变为 sp_ProductPlan_ShowNoCheckInfo 参数1,,参数3
两个逗号挨着,不符合sql语法,这种情况如何处理
5.在程序中sql很多写法,是不是parms应该被提倡使用,而摒弃其他写法(比如拼接法)

解决方案 »

  1.   

    1:SqlParameter和存储过程中的参数名是不是必须一样 
      是的,如果参数名不一样,又怎么知道哪个对应哪个呢2:SqlParameter定义参数时的顺序必须和存储过程中参数的顺序一致 
      不一定,通过参数名对应,不用对应顺序的哦.这跟第一条是一样的.3:把parms传入后,要执行的语句是怎样构造出来的 
      不清楚,你试下在数据库里执行存储过程,那个SQL查询器会出现那个执行4:使用parms时的注意点? 
       数据的类型,赋值的注意是否赋的是空值,或者返回值是空值5.在程序中sql很多写法,是不是parms应该被提倡使用,而摒弃其他写法(比如拼接法)
      看你的需要吧.
      

  2.   

    疑问点: 
    1.SqlParameter和存储过程中的参数名是不是必须一样      
    不一定
    2.SqlParameter定义参数时的顺序必须和存储过程中参数的顺序一致 
    不一定
    3.把parms传入后,要执行的语句是怎样构造出来的 
    ?
    4.使用parms时的注意点? 
    我曾经碰到parms[x].Value赋值时出现 NULL ,执行sql就报错 
    例如: sp_ProductPlan_ShowNoCheckInfo 参数1,参数2,参数3 
    参数2赋值为空时,则变为 sp_ProductPlan_ShowNoCheckInfo 参数1,,参数3 
    两个逗号挨着,不符合sql语法,这种情况如何处理 
    要么传着空值,要么给参数设个默认值,调用的时候不用传值
    5.在程序中sql很多写法,是不是parms应该被提倡使用,而摒弃其他写法(比如拼接法)
    不一定,看实际应用以上说话不一定正确,仅供参考  
     
      

  3.   

    如果确实要把某个参数赋空值,那么应该写parms[x].Value = DBNull.Value ,而不应该写null
      

  4.   

    dsnotcheck=new DataSet(); 
    dbp.Open(); 
    SqlParameter[] parms= { 
    new SqlParameter("@MaterialCD",SqlDbType.NVarChar,100), 
    new SqlParameter("@VenderCD",SqlDbType.NVarChar,100) 
    }; 
    parms[0].Value=cboMaterialCD.SelectedText; 
    parms[1].Value=cboVenderCD.SelectedText; "@MaterialCD"是要和你定义的Sql语句中或
    存储过程中参数相同
      

  5.   

    其他的上面都回答了.
    空值设置:
    错误:
    parms[0].Value=null;
    正确:
    parms[0].Value=DBNull.Value; 
      

  6.   

    1:  是的,一样
    2: 不需要一致
    3:构建sql 语句
    4: 类型和值,DBNuLL
      

  7.   

    1.SqlParameter和存储过程中的参数名是不是必须一样 
    yes2.SqlParameter定义参数时的顺序必须和存储过程中参数的顺序一致 
    no 3.把parms传入后,要执行的语句是怎样构造出来的 
    传值后会自动构造好4.使用parms时的注意点? 
    我曾经碰到parms[x].Value赋值时出现 NULL ,执行sql就报错 
    例如: sp_ProductPlan_ShowNoCheckInfo 参数1,参数2,参数3 
    参数2赋值为空时,则变为 sp_ProductPlan_ShowNoCheckInfo 参数1,,参数3 
    两个逗号挨着,不符合sql语法,这种情况如何处理 
    传NULL5.在程序中sql很多写法,是不是parms应该被提倡使用,而摒弃其他写法(比如拼接法) 
    我认为是,拼接法既不安全又容易出错