0

ここに状況があります。私のストアドプロシージャは、SQLServerで必要な方法で正確に機能します。

ただし、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);

編集:これを見てくれたDavidに感謝します。追加する最後のパラメーターは@Emptypeと呼ばれますが、ストアード・プロシージャーは@Typeという名前であると想定しています。

于 2012-07-21T05:12:00.143 に答える