【发布时间】:2016-11-14 10:12:27
【问题描述】:
我正在编写一个使用方法 (parameters.add) 的软件,但是当我将数据添加到数据库时出现以下错误:
参数化查询需要参数“@Id”,而这不是 提供。
我看到了几个主题,但我无法解决我的问题。
The parameterized query expects the parameter ###### which was not supplied
The parameterized query expects the parameter , which was not supplied
我把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);
}
}
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)
【问题讨论】:
-
你没有给 Id 赋值。你只是在声明它。你给所有其他参数一个值,但不是那个值。
-
好像你没有提供参数值:
cmd.Parameters.Add("@Id",SqlDbType.Int); -
您没有为@ID 参数设置任何值。其次,调用存储过程的命令应该在其 CommandType 属性中说出来
-
这可能不应该是一个问题,但是...让它成为一个大写“i”。
-
您是否在
TransactionTable的数据库列 ID 上设置了 IDENTITY 属性?如果是,则此字段会从您的数据库引擎自动填充,您不需要该参数,也不需要在存储过程中为其插入任何内容。
标签: c# sql-server stored-procedures ado.net