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
答案 0 :(得分:0)
我只能假设BusinessEntityID是一个int(甚至可能是一个标识符)。在这种情况下,我会将sproc参数@bid定义为相同的字段类型(int,如果它是什么)。因此,sproc定义不允许传入非int值。
然后,将c#代码更改为 cmd.Parameters.Add(" @出价",SqlDbType.Int)。价值= int.Parse(textBox_BID.Text.Trim()); //修剪,因为你传入的字符串可能被填充
如果它在该行爆炸,你就会知道即使c#也无法将该值转换为int,因此您需要进行额外的字段验证工作。