无法将字符串参数传递给存储过程

时间:2012-12-14 19:49:19

标签: sql-server stored-procedures

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

我只是尝试使用存储过程从SQL Server数据库中检索数据。 我传递的是一个SqlDbType.Varchar(50)类型的参数,但是我收到了一个SQL错误:

  

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

我做错了什么?如果我在SSMS中测试它,存储过程是有效的...

当我输入

时它甚至可以工作
SqlCommand com = new SqlCommand("WyszukajPrzesylki @Nazwisko = Example", con);

你是我最后的希望......我已经因为这个问题已经失去了2天而无法继续...使用c#插入和更新记录时没有任何问题...就这样....

所以这是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

按钮的操作:

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";

1 个答案:

答案 0 :(得分:1)

你做的几乎一切都正确 - 直到这一行:

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

您正在创建SQL数据适配器,但仅基于com的SQL语句 - 您应该使用此代码:

SqlDataAdapter ad = new SqlDataAdapter(com);

您应该使用已经使用参数和所有内容设置的整个com对象 - 只是它的SQL语句文本!