【问题标题】:Stored Procedure sql data insert error存储过程sql数据插入错误
【发布时间】:2014-03-24 19:25:02
【问题描述】:
     private void btnInsert_Click(object sender, EventArgs e)
     {     
       empCode = txtCode.Text;
       empName = txtName.Text;
       empCell = txtCell.Text;
       empAddress = txtAddress.Text;
        try
        {
            using (cmd = new SqlCommand(" empInsert ", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@empcode", SqlDbType.VarChar).Value = empCode;
                cmd.Parameters.Add("@empname", SqlDbType.VarChar).Value = empName;
                cmd.Parameters.Add("@empcell", SqlDbType.VarChar).Value = empCell;
                cmd.Parameters.Add("@empaddress", SqlDbType.VarChar).Value = empAddress;
                conn.Open();
                cmd.ExecuteNonQuery();
            }
            MessageBox.Show("succesfully inserted", "Congrates");
        }
        catch (Exception ex)
        {
            MessageBox.Show("can't Insert there is error :" + ex, "Error");
        }

        finally
        {
            conn.Close();
        }
    }

这是SQL DB 端的存储过程。

use GDK
GO
create PROCEDURE dbo.empInsert

@id     as    VARCHAR(10,
@name as VARCHAR(10),
@cell as  VARCHAR(10),
@address     as   VARCHAR(20) 

AS

BEGIN

INSERT INTO EmployeeRecord(empcode,empname,empcell,empaddress) VALUES( @id, @name,  @cell, @address)   
END

我无法在 DB 中INSERT。

请在这方面提供帮助

【问题讨论】:

  • 应用程序代码中的参数名称必须与您正在调用的数据库中的底层存储过程的名称匹配。

标签: c# sql-server stored-procedures ado.net


【解决方案1】:

您在存储过程中有参数名称@id,但您传递的是@empcode

改变

cmd.Parameters.Add("@empcode", SqlDbType.VarChar).Value = empCode;

到

cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = empCode;

【讨论】:

  • 实际上没有一个匹配。 @id 只是一个例子。
【解决方案2】:

问题是你的参数名称不匹配。

来自MSDN:

当使用带有 SqlCommand 的参数来执行存储的 SQL Server 时 过程,参数的名称添加到参数 集合必须与存储的参数标记的名称匹配 过程。

所以这就是你需要的:

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", empCode);
cmd.Parameters.AddWithValue("@name", empName);
cmd.Parameters.AddWithValue("@cell", empCell);
cmd.Parameters.AddWithValue("@address", empAddress);

【讨论】:

  • 谢谢....问题出在这里... using (cmd = new SqlCommand(" empInsert ", conn))......它是.... using (cmd = new SqlCommand("dbo.empInsert", conn))
  • 当您从存储过程名称中修剪前导和尾随空格时,我会检查它是否成功。这也可能是问题所在,试试这样:new SqlCommand("empInsert", conn))。
猜你喜欢
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多