参数化查询需要参数'@Id',这是未提供的

beh*_*nam 1 c# sql-server ado.net stored-procedures

我正在编写一个使用方法(parameters.add)的软件,但是当我向数据库添加数据时,我得到以下错误:

参数化查询需要参数'@Id',这是未提供的.

我看到了几个主题,但我无法解决我的问题.

参数化查询需要未提供的参数######

参数化查询需要参数,该参数未提供

我把c#代码和存储过程代码放在下面:

private void btnSave_Click(object sender, EventArgs e)
        {
            string cs = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=TranscactionAccountNumber;Data Source=DESKTOP-5DJFFQP";
            string name = txtName.Text;
            int shomarepeygiri = int.Parse(txtShomarePeygiri.Text);
            string date = dtpDate.Shamsi;
            decimal mablagh = decimal.Parse(txtMablagh.Text);
            string comment = txtComment.Text;
            using (cn = new SqlConnection(cs))
            using (cmd = new SqlCommand("InsertTransaction", cn))
            {
                cmd.Parameters.Add("@Id",SqlDbType.Int);
                cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 100).Value = name;
                cmd.Parameters.Add("@ShomarePeygiri", SqlDbType.Int).Value = shomarepeygiri;
                cmd.Parameters.Add("@Mablagh", SqlDbType.Decimal).Value = mablagh;
                cmd.Parameters.Add("@Comment", SqlDbType.NVarChar).Value = comment;
                cmd.Parameters.Add("@Date", SqlDbType.VarChar).Value = date;
                if (cn.State == ConnectionState.Closed)
                    cn.Open();
                cmd.ExecuteNonQuery();
                MessageBox.Show("Transaction Added Successfully..", "Register Transaction", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }


        }
Run Code Online (Sandbox Code Playgroud)
Create procedure InsertTransaction
(
@id int,
@Name nvarchar(100),
@ShomarePeygiri int,
@Mablagh decimal(18, 0),
@Comment nvarchar(MAX),
@PersianDate varchar(10)

) 
AS
Insert Into TransactionTable(id,[Name],ShomarePeygiri,Mablagh,Comment,PersianDate)
 values (@id,@Name,@ShomarePeygiri,@Mablagh,@Comment,@PersianDate)
Run Code Online (Sandbox Code Playgroud)

myb*_*ame 6

cmd.Parameters.Add("@Id",SqlDbType.Int);
Run Code Online (Sandbox Code Playgroud)

您正在添加参数,但您没有为其提供值.因此您收到此错误.

如果ID列是自动增量,则只需将其从存储过程中删除.

编辑:如果您不知道如何创建列自动递增检查此答案: 在SQL Server Management Studio 2012中自动增加主键