无法将字符串参数传递给存储过程C# [英] Cannot pass string parameter to stored procedure C#

查看:101
本文介绍了无法将字符串参数传递给存储过程C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好

我搜索了这个网站,发现了一些关于我的问题的话题,但仍然无法使这个工作....

我只是想从中检索数据使用存储过程的SQL数据库。

我传递的是一个SqlDbType.Varchar(50)类型的参数,但是得到一个SQL错误:



程序或功能'WyszukajPrzesylki'需要参数'@Nazwisko',这是未提供的。



我做错了什么?如果我在SSMS中测试它,商店程序是有效的...

当我输入时它甚至可以工作



 SqlCommand com = new SqlCommand(WyszukajPrzesylki @Nazwisko = Example,con); 





你是我最后的希望...我已经因为这个问题已经失去了2天而无法得到任何进一步...使用c#插入和更新记录没有任何问题...只是这个......



所以这里是SP的代码< br $>


  ALTER   PROCEDURE  [dbo]。[WyszukajPrzesylki] 
- 在此处添加存储过程的参数
@ Nazwisko varchar 50
AS
BEGIN
- 添加SET NOCOUNT ON以防止额外的结果集
- 干扰w使用SELECT语句。
SET NOCOUNT ON ;

- 在此处插入程序语句
- SELECT * FROM Przesylki WHERE(NazwiskoAdresata = @NazwiskoAdresata)
SELECT * FROM Przesylki WHERE (Przesylki.NazwiskoAdresata = @ Nazwisko
END







和按钮的动作:





 SqlConnection con =  new  SqlConnection(Properties.Settings.Default.Monitoring_PrzesylekString1); 
SqlCommand com = new SqlCommand( WyszukajPrzesylki ,con);
com.CommandType = CommandType.StoredProcedure;
SqlParameter parametrNazwisko = new SqlParameter( @ Nazwisko,SqlDbType.VarChar, 50 );
parametrNazwisko.Value = Dziubak;
com.Parameters.Add(parametrNazwisko);

SqlDataAdapter ad = new SqlDataAdapter(com.CommandText,con);
DataSet ds = new DataSet();

ad.Fill(ds, id);
con.Close();
DataTable datatableA = ds.Tables [ 0 ];
dataGridView1.DataSource = ds;
dataGridView1.DataMember = id;

解决方案

我找到了问题解决方案!



我应该传递这样的整个命令参数



 SqlDataAdapter ad =  new  SqlDataAdapter (COM); 





不仅仅是com.CommandText ......这很愚蠢....但我失去了这么多时间.. 。


从此示例 C#SqlParameter [ ^ ]看起来你应该使用

 SqlParameter parametrNazwisko =  new  SqlParameter(  Nazwisko,SqlDbType.VarChar, 50 ); 

代替

 SqlParameter parametrNazwisko =  new  SqlParameter(    @  Nazwisko,SqlDbType.VarChar, 50 ); 



因此,请从参数名称中删除 @


,因为您使用存储过程作为SQL st你不需要用@符号传递参数名称只是传递参数的名称SQL将完成剩下的工作。



 SqlParameter parametrNazwisko =新的SqlParameter(Nazwisko,Dziubak); 


Hello
I searched through this site and found some topic about my problem but still cannot make this work....
I am simply trying to retrieve data from SQL Database using a stored procedure.
I am passing one parameter that is a SqlDbType.Varchar(50) type, but get back an SQL error:

Procedure or function 'WyszukajPrzesylki' expects parameter '@Nazwisko', which was not supplied.

What am I doing wrong? Store procedure works if I test it in SSMS ...
It even works when I type

SqlCommand com = new SqlCommand("WyszukajPrzesylki @Nazwisko = Example", con);



You are my last hope guys... I've already lost 2 days with this problem and cannot get any further... don't have any problems with inserting and updating records using c# ... just this....

So here is the code of SP

ALTER PROCEDURE [dbo].[WyszukajPrzesylki] 
	-- Add the parameters for the stored procedure here
	@Nazwisko varchar(50)
    AS
    BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
	-- SELECT * FROM Przesylki WHERE (NazwiskoAdresata = @NazwiskoAdresata)
	SELECT * FROM Przesylki WHERE (Przesylki.NazwiskoAdresata = @Nazwisko)
    END




and action of the button:


SqlConnection con = new SqlConnection(Properties.Settings.Default.Monitoring_PrzesylekString1);
          SqlCommand com = new SqlCommand("WyszukajPrzesylki", con);
          com.CommandType = CommandType.StoredProcedure;
          SqlParameter parametrNazwisko = new SqlParameter("@Nazwisko", SqlDbType.VarChar, 50);
          parametrNazwisko.Value = "Dziubak";
          com.Parameters.Add(parametrNazwisko);

          SqlDataAdapter ad = new SqlDataAdapter(com.CommandText, con);
          DataSet ds = new DataSet();

          ad.Fill(ds, "id");
          con.Close();
          DataTable datatableA = ds.Tables[0];
          dataGridView1.DataSource = ds;
          dataGridView1.DataMember = "id";

解决方案

I found problem solution!

I should pass whole command parameter like this

SqlDataAdapter ad = new SqlDataAdapter(com);



not just com.CommandText ... it was stupid.... but I lost so much time...


From this sample C# SqlParameter[^] it looks like you should use

SqlParameter parametrNazwisko = new SqlParameter("Nazwisko", SqlDbType.VarChar, 50);

in stead off

SqlParameter parametrNazwisko = new SqlParameter("@Nazwisko", SqlDbType.VarChar, 50);


So remove the '@' from the parameter name.


since you are using the stored procedure as the SQL statement you dont need to pass the parameter name with @ symbol just pass the name of the parameter SQL will do the rest.

SqlParameter parametrNazwisko = new SqlParameter("Nazwisko", "Dziubak"); 


这篇关于无法将字符串参数传递给存储过程C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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