2012-07-21 154 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