2016-11-14 94 views
1

我寫我用的方法(parameters.add),但一個軟件,該軟件不提供當我將數據添加到數據庫中,我得到以下錯誤:參數化查詢預計參數「@Id」,

參數化查詢需要提供參數「@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) 
+0

你是不是給人一種值給Id。你只是宣佈它。你給所有其他參數一個值,但不是那個。 – ADyson

+0

似乎沒有爲參數提供值:'cmd.Parameters.Add(「@ Id」,SqlDbType.Int);' – Fabio

+0

您不爲@ID參數設置任何值。其次,一個調用存儲過程的命令應該在它的CommandType屬性中說出 – Steve

回答

5
cmd.Parameters.Add("@Id",SqlDbType.Int); 

要添加參數,但AR沒有給它一個價值。因爲你收到這個錯誤。

如果ID列是自動增量,只需將其從存儲過程中刪除。

編輯:如果你不知道如何創建列自動遞增檢查這個答案: Auto increment primary key in SQL Server Management Studio 2012

+0

@alexshiro好吧,如果ID是自動遞增的,就像我在我的回答中寫的那樣,只需從存儲過程中刪除它,並且不要在代碼中給出該參數。 sql服務器將自動遞增ID號併爲您填寫ID。 – mybirthname

+0

@ mybrithname,但是,我得到以下錯誤:過程或函數'InsertTransaction'期望參數'@Name',它沒有提供。 –

+0

@alexshiro您需要從代碼和存儲過程中刪除ID參數。該錯誤告訴你,你不提供來自你的名字參數的值 – mybirthname

2

改變你的程序如下

Alter procedure InsertTransaction 
(
@Name nvarchar(100), 
@ShomarePeygiri int, 
@Mablagh decimal(18, 0), 
@Comment nvarchar(MAX), 
@PersianDate varchar(10) 
) 
AS 
Insert Into TransactionTable([Name],ShomarePeygiri,Mablagh,Comment,PersianDate) 
values (@Name,@ShomarePeygiri,@Mablagh,@Comment,@PersianDate) 
+0

我刪除了「ID」。但是,我現在得到錯誤:過程或函數'InsertTransaction'需要參數'@Name',它沒有提供。 –

+0

你在哪裏得到這個錯誤在SQL或C# – mansi

+0

我得到的錯誤在C#中。這行代碼:cmd.ExecuteNonQuery(); –