0

我这里有个情况。我的存储过程完全按照我在 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();
    }
4

1 回答 1

1

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

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

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

于 2012-07-21T05:12:00.143 回答