SQLException Параметризованный запрос ###, который не был предоставлен - PullRequest
1 голос
/ 11 октября 2011

Я искал этот сайт и другие сайты, чтобы понять и избавиться от этого исключения.Много ответов, но я не могу найти, где «я не прав».Это исключение:

Параметризованный запрос '(@listenr int, @ stregko nvarchar (4000)) SELECT * FROM Indkøbsliste' ожидает параметр '@stregko', который не был предоставлен.

А вот и мой код.

    public Indkøbsliste findIndkøbslisteStregkode(string stregko, int listenr)
    {
        Indkøbsliste inl = new Indkøbsliste();



        SqlConnection myCon = DBcon.getInstance().conn();
        myCon.Open();

        string query = "SELECT * FROM Indkøbsliste WHERE Stregkode = @stregko AND ListeNr = @listenr";
        SqlCommand com = new SqlCommand(query, myCon);
        com.Parameters.Add("@stregko", System.Data.SqlDbType.VarChar).Value = stregko; 
        com.Parameters.Add("@listenr", System.Data.SqlDbType.Int).Value = listenr; 
        SqlDataReader dr = com.ExecuteReader();
        if (dr.Read())
        {

            inl.ListeNr = dr.GetInt32(1);
            inl.Stregkode = dr.GetString(2);
            inl.Navn = dr.GetString(3);
            inl.Antal = dr.GetInt32(4);
            inl.Pris = dr.GetDecimal(5);

        }
        myCon.Close();
        return inl;
    }

Ответы [ 5 ]

2 голосов
/ 11 октября 2011

В запросе SQL ожидается строка Unicode для stregko, но вы предоставляете строку, отличную от Unicode.

Попробуйте изменить свой код C # для назначения параметра следующим образом:

com.Parameters.Add("@stregko", System.Data.SqlDbType.NVarChar).Value = stregko; 

Обратите внимание на "N" в NVarChar!

2 голосов
/ 11 октября 2011

Используйте AddWithValue метод

com.Parameters.AddWithValue("@stregko", stregko);
or 
com.Parameters.Add("@stregko", SqlDbType.NVarChar, 50).Value = stregko;
or 
SqlParameter parameter = new SqlParameter("@stregko", SqlDbType.NVarChar, 50);
parameter.Value = stregko;
com.Parameters.Add(parameter);

вместо

com.Parameters.Add("@stregko", System.Data.SqlDbType.VarChar).Value = stregko;

1 голос
/ 11 октября 2011

как из сообщения об ошибке, попробуйте изменить:

com.Parameters.Add("@stregko", System.Data.SqlDbType.VarChar)

с

com.Parameters.Add("@stregko", System.Data.SqlDbType.NVarChar)
1 голос
/ 11 октября 2011

Ваш параметр SQL - nvarchar - попробуйте использовать System.Data.SqlDbType.NVarChar в вашем коде C #.

0 голосов
/ 11 октября 2011

Вам необходимо указать размер.

com.Parameters.Add("@stregko", System.Data.SqlDbType.NVarChar,50).Value = stregko; 
...