2012-07-21 6 views
0

여기 상황이 있습니다. 내 저장 프로 시저가 SQL Server에서 원하는대로 정확하게 작동합니다.ADO.NET의 저장 프로 시저 오류

그러나 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 연결입니다 :

여기 내 저장 프로 시저입니다. 당신이 당신의 @의 Mob2 매개 변수를 int로 변환을 놓친 것 같습니다

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(); 
    } 
+2

어떤 오류가 발생하고 있습니까? –

+0

"문자열에서 매개 변수 값을 Int32로 변환하지 못했습니다." – Girish

+0

이것은 조금 까다 롭습니다. 잘못되었습니다. dropdown1 값은 다른 테이블로 이동해야합니다. 'TypeID'라는 열이 자동으로 생성되어 부모 테이블 dbo.Emp (EmpType)로 다시 전송됩니다. 이 작업을 수행하는 방법을 알고 있습니다 .. – Girish

답변

1

:

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

편집 :이보고에 대한 다윗 감사합니다. 추가하는 마지막 매개 변수는 @Emptype이지만, 저장된 proc은 @Type이라는 이름이 필요합니다.

+0

'Insert Error : 프로 시저 또는 함수'bridge_Type '에 제공되지 않은'@Type '매개 변수가 필요합니다.' – Girish

+0

그것이 의미하는 바는 dropdown1 값이 다른 테이블로 이동해야한다는 것입니다. 자동 생성 된 'TypeID'라는 열이 부모 테이블 dbo.Emp (EmpType)로 다시 전송됩니다. 어떻게 해야할지 모르겠다. 이 .. – Girish

+0

@ Girish : 잘못 명명 된 매개 변수를 보내고 있기 때문에 오류가 발생합니다. 저장 프로 시저에서 "Type"이라는 매개 변수가 필요하지만 대신 "Emptype"이라는 매개 변수를 보냅니다. "Emptype"의 이름을 "Type"으로 변경하여 예상되는 매개 변수와 일치시킵니다. – David