Хранимая процедура ничего не возвращает - PullRequest
0 голосов
/ 25 января 2012

Это может быть простой провал с моей стороны, но я просто не могу понять, где и как.Я кодирую службу Windows, которая делает кучу вещей.Одним из них является вставка и получение данных из базы данных MS Sql 2005 с помощью хранимых процедур.

Следующий код является частью службы Windows, а теперь также является формой Windows, где оба дают одинаковый пустой результат.*

    try
        {
            SqlCommand cmd = new SqlCommand("U_RfId_ProductNumberGet", connectionRFID);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            //SqlParameter paramProd = new SqlParameter();
            SqlParameter paramOut = new SqlParameter();
            paramOut.ParameterName = "@ProductInformation";
            paramOut.Direction = System.Data.ParameterDirection.Output;
            paramOut.SqlDbType = System.Data.SqlDbType.VarChar;
            paramOut.Size = 50;
            cmd.Parameters.Add(paramOut);
            cmd.Parameters.AddWithValue("@ProductNumber", content); //content = "1" for testing
            connectionRFID.Open();

            textBox1.Text = (String)paramOut.Value;

            //cmd.Parameters["@ProductInformation"].Value.ToString();
            connectionRFID.Close();
        }
        catch (Exception ex)
        { textBox1.Text = ex.Message;
        connectionRFID.Close();
        }

И еще есть SP, который вызывает код.Я попытался изменить его, чтобы он возвращал только набор результатов вместо скалярного выходного параметра, и затем вызов к SP работает, но я бы предпочел использовать скалярные значения.: Если я выполню SP через SQL Management Studio, я получу действительный результат.

Кто-нибудь заметит, что я забыл?

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Вы забыли выполнить команду.

cmd.Execute(); // to get a resultset

или

cmd.ExecuteNonQuery(); // to get output parameters but no resultset 

должны делать это в зависимости от того, хотите ли вы набор результатов.

2 голосов
/ 25 января 2012

Вы должны использовать ExecuteNonQuery для командного объекта. SqlCommand Executenonquery

    connectionRFID.Open();
    cmd.ExecuteNonQuery(); // this missing from your code 
   textBox1.Text = (String)paramOut.Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...