SQL存储过程需要参数,该参数未提供。 [英] SQL Stored Procedure expects parameter, which was not supplied.

查看:216
本文介绍了SQL存储过程需要参数,该参数未提供。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的存储过程:

 创建  PROCEDURE  insertEmp( @ Id   int   output  @ Name   varchar  50 ), @ Sal   money  AS  
开始
插入 进入 EMP1(Empname,EmpSalary) @ Name @Sal
select @Id = @@ Identity
END



 使用系统; 
使用 System.Collections.Generic;
使用 System.ComponentModel;
使用 System.Data;
使用 System.Drawing;
使用 System.Linq;
使用 System.Text;
使用 System.Windows.Forms;
使用 System.Data.SqlClient;

命名空间 SP2
{
public partial class Form1:Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click( object sender,EventArgs e)
{
SqlConnection con = new SqlConnection(helpercs.connectionstring);
SqlCommand cmd = new SqlCommand( insertEmp ,con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parId,parName,parSalary;
parId = cmd.Parameters.Add( @ Id,SqlDbType.Int);
parId.Direction = ParameterDirection.Output;
parName = cmd.Parameters.Add( @ name,SqlDbType.VarChar,< span class =code-digit> 50 );
parSalary = cmd.Parameters.Add( @ salary,SqlDbType.Money);
parName.Value = int .Parse(txtname.Text);
parSalary.Value = int .Parse(txtsalary.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
txtid.Text = parId.Value.ToString();
}
}
}



请帮助我,我试了大约2个小时。

解决方案

 parSalary = cmd.Parameters.Add(  @薪水,SqlDbType.Money); 



应该是

 parSalary = cmd.Parameters .Add(  @ Sal,SqlDbType.Money); 



当您将 @Sal 钱传递给存储过程时。



两个参数( C#& SQL SP')应匹配。


错误可能因为此转换而改变了这个以及上述参数更改。

< pre lang =cs> parName.Value = int .Parse(txtname.Text);
parSalary.Value = int .Parse(txtsalary.Text);





 parName.Value = txtname.Text; 
parSalary.Value = int .Parse(txtsalary.Text);



here int.Parse返回int已分配给名称字段,该字段为Varchar类型。


This is my stored procedure:

create PROCEDURE insertEmp(@Id int output,@Name varchar(50),@Sal money) AS
begin
    insert into EMP1(Empname,EmpSalary)values (@Name,@Sal)
    select @Id=@@Identity
END


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace SP2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
                InitializeComponent();
        }
 
	private void button1_Click(object sender, EventArgs e)
	{
		SqlConnection con = new SqlConnection(helpercs.connectionstring);
		SqlCommand cmd = new SqlCommand("insertEmp", con);
		cmd.CommandType=CommandType.StoredProcedure;
		SqlParameter parId, parName, parSalary;
		parId = cmd.Parameters.Add("@Id", SqlDbType.Int);
		parId.Direction = ParameterDirection.Output;
		parName = cmd.Parameters.Add("@name",SqlDbType.VarChar,50);
		parSalary = cmd.Parameters.Add("@salary",SqlDbType.Money);
		parName.Value =int.Parse(txtname.Text);
		parSalary.Value =int.Parse( txtsalary.Text);
		con.Open();
		cmd.ExecuteNonQuery();
		con.Close();
		txtid.Text = parId.Value.ToString();
	}
    }
}


Please help me, I tried for about 2 hours.

解决方案

parSalary = cmd.Parameters.Add("@salary",SqlDbType.Money);


should be

parSalary = cmd.Parameters.Add("@Sal",SqlDbType.Money);


As you are passing @Sal money to your stored procedure.

Both parameters (C# & SQL SP''s) should match.


the error could because of this conversion change this in addition to the above said parameter change.

parName.Value =int.Parse(txtname.Text);
parSalary.Value =int.Parse( txtsalary.Text);


to

parName.Value =txtname.Text;
parSalary.Value =int.Parse( txtsalary.Text);


here int.Parse returns int was assigned to the name field which is Varchar type.


这篇关于SQL存储过程需要参数,该参数未提供。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆