我尝试了不同的方法,但它仍然抛出了无法将varchar转换为int的错误

时间:2018-02-27 17:56:11

标签: sql .net sql-server

private void button_submit_Click(object sender, EventArgs e)
        {

            con = new OleDbConnection("Provider=SQLNCLI11;Data Source=.;Integrated Security=SSPI;Initial Catalog=AdventureWorks2012");
            cmd = new OleDbCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "usp_empinfo";
            cmd.Connection = con;
            cmd.Parameters.AddWithValue("@bid",textBox_BID.Text);
            cmd.Parameters.AddWithValue("@job",SqlDbType.VarChar).Direction = ParameterDirection.Output;
            cmd.Parameters.AddWithValue("@gender",SqlDbType.VarChar).Direction = ParameterDirection.Output;
            cmd.Parameters.AddWithValue("@maritalstatus",SqlDbType.VarChar).Direction = ParameterDirection.Output;
            con.Open();
            cmd.ExecuteNonQuery();
            label_Job.Text =label_Job.Text + "" + cmd.Parameters["@job"].Value.ToString();
            label_gender.Text=label_gender.Text + "" + cmd.Parameters["@gender"].Value.ToString();
            label_MStatus.Text=label_MStatus.Text + "" + cmd.Parameters["@maritalstatus"].Value.ToString();

        }

我的存储过程包含输入和输出参数:

alter PROC USP_EMPINFO
@bid AS varchar(20),
@job as varchar(20) output,
@gender as varchar(20) output,
@maritalstatus as varchar(20) output
as
begin
select @Job=JobTitle,@Gender=Gender,@maritalstatus=MaritalStatus  from humanresources.employee
where BusinessEntityID = @bid
end

1 个答案:

答案 0 :(得分:0)

我只能假设BusinessEntityID是一个i​​nt(甚至可能是一个标识符)。在这种情况下,我会将sproc参数@bid定义为相同的字段类型(int,如果它是什么)。因此,sproc定义不允许传入非int值。

然后,将c#代码更改为 cmd.Parameters.Add(" @出价",SqlDbType.Int)。价值= int.Parse(textBox_BID.Text.Trim()); //修剪,因为你传入的字符串可能被填充

如果它在该行爆炸,你就会知道即使c#也无法将该值转换为int,因此您需要进行额外的字段验证工作。