【问题标题】:Failed to convert parameter value from a String to a Boolean Passing value to SP (ASP.net)无法将参数值从字符串转换为布尔值 将值传递给 SP (ASP.net)
【发布时间】:2013-06-28 08:05:03
【问题描述】:

向存储过程传值时出错

"Failed to convert parameter value from a String to a Boolean".

不明白为什么我的代码出现了这个问题,

C#代码在这里,

invProject.targetprojectId =Convert.ToInt32(this.txtOrderNumber.Text);
        invProject.projects = this.txtProjectTitle.Text;
        invProject.bridge_cost = Convert.ToDouble(this.txtBridgeCost.Text);
        invProject.high_cost = Convert.ToDouble(this.txtHighwayCost.Text);
        invProject.bridge_comp = this.ddlbridgeComplexity.SelectedValue.ToString();
        invProject.hway_comp = this.ddlHighwayComplexity.SelectedValue.ToString();
        invProject.project_type = this.ddlProjectType.SelectedValue.ToString();
        invProject.proj_Owner = this.ddlProjectOwner.SelectedValue.ToString();
        invProject.ind_Exp = Convert.ToInt32(this.chkIndividualExperience.Checked);

传递的参数如下,

 SqlParameter projectid = cmd.Parameters.Add("@Target_Project_ID", SqlDbType.Int);
           projectid.Value = InvPro.targetprojectId;

       SqlParameter title = cmd.Parameters.Add("@Projects", SqlDbType.VarChar);
       title.Value = InvPro.projects;
       SqlParameter bridgecost = cmd.Parameters.Add("@Bridge_Cost", SqlDbType.Money);
       bridgecost.Value = InvPro.bridge_cost;
       SqlParameter highwaycost = cmd.Parameters.Add("@Hway_Cost", SqlDbType.Money);
       highwaycost.Value = InvPro.high_cost;
       SqlParameter bComplexity = cmd.Parameters.Add("@Bridge_Comp", SqlDbType.VarChar);
       bComplexity.Value = InvPro.bridge_comp;
       SqlParameter hComplexity = cmd.Parameters.Add("@Hway_Comp", SqlDbType.VarChar);
       hComplexity.Value = InvPro.hway_comp;
       SqlParameter cProjectOwner = cmd.Parameters.Add("@ProjectType", SqlDbType.VarChar);
       cProjectOwner.Value = InvPro.project_type;
       SqlParameter ProjectOwner = cmd.Parameters.Add("@Proj_Owner", SqlDbType.VarChar);
       ProjectOwner.Value = InvPro.proj_Owner;
       SqlParameter workclass = cmd.Parameters.Add("@Proj_WCB", SqlDbType.VarChar);
       workclass.Value = InvPro.proj_WCB;
       SqlParameter INdExp = cmd.Parameters.Add("@Ind_Exp", SqlDbType.Bit);
       INdExp.Value = InvPro.proj_WCB;

SP定义参数是,

  @Target_Project_ID int,
      @Projects varchar(50),
      @Bridge_Cost money,
      @Hway_Cost money,
      @Bridge_Comp nvarchar(50),
      @Hway_Comp nvarchar(50),
      @ProjectType nvarchar(50),
      @Proj_Owner nvarchar(50),
      @Proj_WCB nvarchar(50),
      @Ind_Exp bit,

而表的列是,

Target_Project_ID int
Projects  nvarchar
Bridge_Cost money
Hway_Cost money
Bridge_Comp  nvarchar
Hway_Comp  nvarchar
Proj_WCB  nvarchar
Proj_Owner  nvarchar
Ind_Exp     bit

我已经尝试了很多,但无法消除错误希望尽快听取您的意见

谢谢

【问题讨论】:

  • 你在invProject.ind_Exp = Convert.ToInt32(this.chkIndividualExperience.Checked);得到了什么
  • chkIndividualExperience 是我们得到 1 或 0 的复选框

标签: asp.net sql-server sql-server-2008 stored-procedures


【解决方案1】:

你的问题在这里:

   SqlParameter workclass = cmd.Parameters.Add("@Proj_WCB", SqlDbType.VarChar);
   workclass.Value = InvPro.proj_WCB;
   SqlParameter INdExp = cmd.Parameters.Add("@Ind_Exp", SqlDbType.Bit);
   INdExp.Value = InvPro.proj_WCB;

您正在将两个参数的值设置为同一个对象,而它们属于不同的 Sqltypes。一个是 VarChar,一个是 bit。

InvPro.proj_WCB 可以是字符串或布尔值。 在您的代码中,您将其视为两者兼而有之。

【讨论】:

    【解决方案2】:

    将变量 InvPro.proj_WCB 的值转换为布尔值是我的猜测。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 2018-09-07
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2012-03-10
      • 2012-12-16
      相关资源
      最近更新 更多