как изменить этот код выбора для хранимой процедуры с помощью C#

#stored-procedures

#хранимые процедуры

Вопрос:

Я хочу изменить этот код для хранимой процедуры:

 string sql6 = string.Format("SELECT * from t_vsubmenu where mainid="   Convert.ToInt32(ds4.Tables[0].Rows[i]["fid"].ToString()));

SqlDataAdapter da6 = new SqlDataAdapter(sql6, con);
DataSet ds6 = new DataSet();
da6.Fill(ds6, "t_vsubmenu");
DataTable db6 = ds6.Tables["t_vsubmenu"];
  

и я не знаю, как это сделать? Моя проблема в том, как отправить код fid в хранимую процедуру?

Например, моя хранимая процедура:

 create PROCEDURE [dbo].[select_t_vsubmenu]
  

как

 begin

select * from t_vsubmenu

end
  

Ответ №1:

Во-первых, вы можете добавить параметры к хранимой процедуре:

 create procedure select_menu
(
@id int
)
begin
    select * from t_vsubmenu where id=@id
end
  

Затем используйте класс SqlCommand для вызова вашей процедуры:

 SqlCommand cmd = new SqlCommand("select_vsubmenu_input_mainid", con); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add("@mainid", SqlDbType.Int); 
cmd.Parameters["@mainid"].Value = Convert.ToInt32(ds4.Tables[0].Rows[i]["fid"].ToString()); 
cmd.Open();

DataTable db6 = new DataTable();

SqlDataAdapter da6 = new SqlDataAdapter();
da6.SelectCommand = cmd;
da6.Fill(db6);
  

Чтобы получить полный пример, посмотрите на справку по классу SqlCommand.

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand (v = против110).aspx

Комментарии:

1. Я не использовал имя вашего поля, это пример

2. c #: SqlCommand cmd = новая SqlCommand(«select_vsubmenu_input_mainid», con); cmd. CommandType = командный тип. Хранимая процедура; cmd.Parameters.Add(«@mainid», SqlDbType.Int ); cmd.Параметры[«@mainid»].Значение = Преобразовать. ToInt32(ds4.Tables[0].Rows[i][«fid»]. toString()); DataSet ds6 = новый DataSet(); SqlDataAdapter da6 = новый SqlDataAdapter(«select_vsubmenu_input_mainid», con); da6.Fill(ds6, «select_vsubmenu_input_mainid»); DataTable db6 = ds6.Tables[«select_vsubmenu_input_mainid»];

3. ошибка: Процедура или функция ‘select_vsubmenu_input_mainid’ ожидает параметр ‘@mainid’, который не был предоставлен.

4. 1 попробуйте изменить [«@mainid»] на [«mainid»]

5. @user3696331 эй, чувак, ты не используешь sqlcommand cmd, посмотри на мой пример, последние две строки …. da6.SelectCommand = cmd; измените и это: SqlDataAdapter da6 = новый SqlDataAdapter(«select_vsubmenu_input_mainid», con); для SqlDataAdapter da6 = новый SqlDataAdapter(cmd, con );

Ответ №2:

спасибо всем, наконец, мой ответ:

 SqlCommand cmd4 = new SqlCommand("select_t_news_input_newsid", con);
        SqlParameter param4;
        cmd4.CommandType = CommandType.StoredProcedure;
        param4 = new SqlParameter("@newsid", Request.QueryString["newsid"].ToString());
        param4.Direction = ParameterDirection.Input;
        param4.DbType = DbType.Int32;
        cmd4.Parameters.Add(param4);
        SqlDataAdapter da4 = new SqlDataAdapter(cmd4);
        DataSet ds4 = new DataSet();
        da4.Fill(ds4, "select_t_news_input_newsid");
        DataTable db4 = ds4.Tables["select_t_news_input_newsid"];