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

3

我在这个网站上搜索了一些与我的问题相关的主题,但仍然无法使其正常工作...

我只是尝试使用存储过程从SQL Server数据库检索数据。

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

存储过程或函数“WyszukajPrzesylki”需要提供未提供的参数“@Nazwisko”。

我做错了什么?如果在SSMS中测试它,则存储过程可以正常工作...

如果我键入以下内容,它甚至也可以工作。

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

你是我最后的希望,伙计们……我已经花了两天时间解决这个问题,但无法进一步处理……在使用C#插入和更新记录时没有任何问题……只有这个问题……
以下是存储过程的代码:
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";

...SqlCommand("EXEC dbo.WyszukajPrzesylki @Nazwisko = 'Example';"), con); - Aaron Bertrand
1个回答

1

你做得几乎都很对 - 直到这一行:

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

你正在创建一个 SQL 数据适配器,但只基于 com 的 SQL 语句 - 你应该使用这个:

SqlDataAdapter ad = new SqlDataAdapter(com);

你应该使用已经设置好参数的整个com对象 - 而不是仅仅它的SQL语句文本!


这一行是错误的:SqlDataAdapter ad = new SqlDataAdapter(com.CommandText, con);应该改成这样:SqlDataAdapter ad = new SqlDataAdapter(com);简直不敢相信我花了16个小时才发现这个问题!!! :( - Mariusz Wiloch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接