3

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

我只是尝试使用存储过程从 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";
4

1 回答 1

1

你做的几乎所有事情都是正确的——直到这一行:

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

您正在创建一个 SQL 数据适配器,但仅基于 SQL 语句com- 您应该改用它:

SqlDataAdapter ad = new SqlDataAdapter(com);

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

于 2012-12-14T19:52:58.857 回答