2012-07-21 153 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連接。

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

你得到了什麼錯誤? – 2012-07-21 05:08:22

+0

「無法將參數值從字符串轉換爲Int32。」 – Girish 2012-07-21 05:21:25

+0

這是錯誤的,因爲這是有點棘手.. dropdown1值必須去其他表..有一列名爲'TypeID'是自動生成,然後發回父表dbo.Emp(EmpType)..我不知道如何做到這一點.. – Girish 2012-07-21 05:22:40

回答

1

它看起來就像你在@ MOB2參數錯過了轉換成int:

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

編輯: 感謝David看到這一點。您添加的最後一個參數稱爲@Emptype,但存儲的proc期望它被命名爲@Type。

+0

它表示'插入錯誤:過程或函數'bridge_Type'需要參數'@Type',它沒有提供。' – Girish 2012-07-21 05:23:50

+0

這意味着什麼 - dropdown1的值必須去其他表..有一個名爲'TypeID'的列自動生成,然後發送回父表dbo.Emp(EmpType)..我不知道該怎麼辦這個.. – Girish 2012-07-21 05:24:41

+0

@Girish:你得到那個錯誤是因爲你發送了一個錯誤命名的參數。在存儲過程中,它需要一個名爲「Type」的參數,但是您要發送一個名爲「Emptype」的參數。將「Emptype」的名稱更改爲「Type」以匹配預期的參數。 – David 2012-07-21 05:28:55