ADO.NET存储过程错误

时间:2012-07-21 05:04:07

标签: stored-procedures ado.net

我有一个情况。我的存储过程在SQL Server中的工作方式完全正常。

但是,我无法在ADO.NET中实现相同的功能。

这是我的存储过程:

Create Procedure bridge_Type(
@EmpID INT,
@Name   varchar(50),
@Mob2   numeric(10,0),
@Email  varchar(50),
@Type   varchar(50)
)
AS 
DECLARE @TYPEID int
Set NOCOUNT OFF

BEGIN TRANSACTION

INSERT INTO dbo.EmpType VALUES (@Type)

SET @TYPEID = SCOPE_IDENTITY()

IF @@ERROR <> 0 
BEGIN     
ROLLBACK     
RETURN 
END 


Insert into dbo.Emp VALUES (@EmpID, @Name, @Mob2, @Email, @TYPEID)
IF @@ERROR <> 0
BEGIN 
ROLLBACK
RETURN
END

COMMIT 

这是我的ADO.NET连接,用于简单的注册过程。

public void InsertInfo()
{
        String empdb = @"Data Source=USER-PC\SQLEXPRESS;Initial Catalog=EmployeeDB;Integrated Security=True";
        SqlConnection conn = new SqlConnection(empdb);
        SqlCommand cmd = new SqlCommand("bridge_Type", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        try
        {
            conn.Open();
            /*cmd.Parameters.Add(new SqlParameter("@EmpID", TextBox1.Text));
            cmd.Parameters.Add(new SqlParameter("@Name", TextBox2.Text));
            cmd.Parameters.Add(new SqlParameter("@Mob2", TextBox3.Text));
            cmd.Parameters.Add(new SqlParameter("@Email", TextBox4.Text));
            cmd.Parameters.Add(new SqlParameter("@Emptype", dropdown1.SelectedValue));
            cmd.Parameters.Add(new SqlParameter("@Emptype", SqlDbType.VarChar, 50));
            cmd.Parameters("@Emptype").Value = dropdown1.SelectedValue; */

            cmd.Parameters.Add(new SqlParameter("@EmpID", SqlDbType.Int));
            cmd.Parameters["@EmpID"].Value = Convert.ToInt32(TextBox1.Text);
            cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.VarChar, 50));
            cmd.Parameters["@Name"].Value = TextBox2.Text;
            cmd.Parameters.Add(new SqlParameter("@Mob2", SqlDbType.Int));
            cmd.Parameters["@Mob2"].Value = TextBox3.Text;
            cmd.Parameters.Add(new SqlParameter("@Email", SqlDbType.VarChar, 50));
            cmd.Parameters["@Email"].Value = TextBox4.Text;
            cmd.Parameters.Add(new SqlParameter("@Emptype", SqlDbType.VarChar, 50));
            cmd.Parameters["@Emptype"].Value = dropdown1.SelectedValue;

            cmd.ExecuteNonQuery();
        }
        catch (System.Data.SqlClient.SqlException ex)
        {
            string msg = "Insert Error:";
            msg += ex.Message;
            throw new Exception(msg);
        }
        finally
        {
            if (conn != null)
            {
                conn.Close();
            }
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        InsertInfo();
    }

1 个答案:

答案 0 :(得分:1)

看起来您错过了转换为@ Mob2参数中的int:

cmd.Parameters.Add(new SqlParameter("@Mob2", SqlDbType.Int));
cmd.Parameters["@Mob2"].Value = Convert.ToInt32(TextBox3.Text);

编辑: 感谢大卫看到这个。您要添加的最后一个参数称为@Emptype,但存储的proc期望它被命名为@Type。

相关问题