07navneet Ответов: 4

Процедура или функция 'InsertInfo' ожидает параметр '@s_name', который не был указан.


Я сделал этот простой пример вставки данных в БД с помощью процедуры, но всегда получаю эту ошибку
Procedure or Function 'InsertInfo' expects parameter '@s_name', which was not supplied.

Подвох в том что данные вставляются в таблицу но ошибка показана!
HTML-файл
:-
<div>
    <asp:Label runat=server>Name</asp:Label>
    <asp:TextBox runat=server ID="txtName"></asp:TextBox><br />
    <asp:Label runat=server>Phone No.</asp:Label>
    <asp:TextBox runat=server ID="txtPhone"></asp:TextBox><br />
    <asp:Label runat=server>Degree in:</asp:Label>
    <asp:TextBox runat=server ID="txtDegree"></asp:TextBox><br />
    <asp:Button runat=server ID="btnSubmit" Text="Submit" onclick="btnSubmit_Click"/>
    <asp:Button runat=server ID="btnEdit" Text="Edit" />
    </div>


Код(.cs):-
publiv void insertData()
{
SqlConnection con = new SqlConnection(str_con);
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "InsertInfo";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
string a = Convert.ToString(txtName.Text);
int b = Convert.ToInt32(txtPhone.Text);
string c = txtDegree.Text;
cmd.Parameters.Add("@s_name", SqlDbType.VarChar).Value = a;
cmd.Parameters.Add("@s_phone", SqlDbType.Int).Value = b;
cmd.Parameters.Add("@s_degree", SqlDbType.VarChar).Value = c;
//cmd.Parameters.AddWithValue("@s_name", a);&lt;------tried with these also
//cmd.Parameters.AddWithValue("@s_phone", b);
//cmd.Parameters.AddWithValue("@s_degree", c);
cmd.ExecuteNonQuery();&lt;-------error points here
con.Close();
}


Хранимая процедура:-
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[InsertInfo]
(
	@s_name varchar(300),
	@s_phone int,
	@s_degree varchar(300)
)
as
insert into info(s_name,s_phone,s_degree) values(@s_name,@s_phone,@s_degree)
exec InsertInfo

Я умоляю вас, пожалуйста, помогите мне найти ошибку.

sriman.ch

Проверяли ли вы, что значения соответствующих текстовых полей не являются нулевыми или пустыми? Попробуйте один раз отладить код и посмотреть, сможете ли вы заполнить параметры или нет ?

07navneet

Параметры заполняются(я не могу показать вам изображение "print screen" во время отладки) их соответствующими значениями

[no name]

EDIT: добавлен тег "pre"

4 Ответов

Рейтинг:
34

thatraja

Я понял.. В вашем коде нет никаких проблем. Удалить последнюю строку в хранимой процедуре :мертв:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[InsertInfo]
(
@s_name varchar(300),
@s_phone int,
@s_degree varchar(300)
)
as
insert into info(s_name,s_phone,s_degree) values(@s_name,@s_phone,@s_degree)
exec InsertInfo----------THIS LINE


sriman.ch

пятно на...5!

07navneet

!!!!!!!!!! Вы действительно MVP, сэр!
Поймал ошибку одним выстрелом! Я боролся с этим типом проблемы уже месяц, но не мог найти ответа! Я думал об этом ответе, но догадался, что это синтаксис процедуры.
Большое спасибо!!!

07navneet

Еще одна помощь, сэр. Я учусь ASP.NET сам по себе, но не в состоянии справиться с такими проблемами. Каким должен быть способ научиться и овладеть этим, чтобы эта работа не стала для меня проблемой в 2012 году?

Рейтинг:
2

dilip0165

Проверьте для этого три простые задачи

1.не передавая параметр хранимой процедуре Sql server из Asp.net.
2.Установить правильное значение commandtype значение storedprocedure .
3.Значение DBNull для выходного параметра.

для получения более подробной информации по этой теме вы можете проверить на DataHaunting Процедура или функция ожидает параметр, который не был указан


CHill60

Немного запоздал с ответом. Этому вопросу уже более 2 лет ... и решается

Рейтинг:
1

Eduard Lu

Это означает, что вы не передаете значение в @s_name при вызове хранимой процедуры. Вам нужно передать допустимый параметр во время выполнения SP.

С уважением,
Эдуард


07navneet

Если это так просто, то как??

Рейтинг:
0

Abhi KA

Я думаю, что не передавая значение @s_name при вызове хранимой процедуры

Здесь получение ценности

string a = Convert.ToString(txtName.Text);


07navneet

???

Abhi KA

не получить значения