powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно передать параметр в ХП MySql из C#?
11 сообщений из 11, страница 1 из 1
Как правильно передать параметр в ХП MySql из C#?
    #38029500
V7T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V7T
Гость
Здравствуйте.

Есть хп:
Код: sql
1.
2.
3.
4.
5.
create procedure GetRows(in param1 varchar(70))
begin
    select col1, col2, col3 from table1 where id_table2 = 
    (select id from table2 where name=param1);
end



Передаю параметр таким способом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public static void GetRows(string param1)
{
	string sql=string.Format("GetRows");
	MySqlCommand cmd=new MySqlCommand(sql,connection);
	cmd.CommandType=CommandType.StoredProcedure;
	MySqlParameter param=new MySqlParameter();
	param.MySqlDbType=MySqlDbType.VarChar;
	param.Direction=ParameterDirection.Input;
	param.ParameterName="@param1";
	param.Size=70;
	param.Value=param1;
	cmd.Parameters.Add(param);

	/*cmd.Parameters.Add(new MySqlParameter("@param1",MySqlDbType.VarChar)).Value=param1;
	cmd.Parameters["@param1"].Direction=ParameterDirection.Input;*/

	if(OpenConnection()==true)
	{
		MySqlDataReader dr=cmd.ExecuteReader();
		while(dr.Read())
		{
			Console.WriteLine((string)dr["col1"]+"  "+(int)dr["col2"]+"   "+(float)dr["col3"]);
		}
		dr.Close();
		CloseConnection();
	}
}



передача параметра другим способом - напрямую:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public static void GetRows(string param1)
{
	string sql=string.Format("call GetRows(@param1);");


	MySqlCommand cmd=new MySqlCommand(sql,connection);

	/*cmd.CommandType=CommandType.StoredProcedure;*/
        cmd.CommandType=CommandType.Text;

	MySqlParameter param=new MySqlParameter();
	param.MySqlDbType=MySqlDbType.VarChar;
	param.Direction=ParameterDirection.Input;
	param.ParameterName="@param1";
	param.Size=70;
	param.Value=param1;
	cmd.Parameters.Add(param);

	/*cmd.Parameters.Add(new MySqlParameter("@param1",MySqlDbType.VarChar)).Value=param1;
	cmd.Parameters["@param1"].Direction=ParameterDirection.Input;*/

	if(OpenConnection()==true)
	{
		MySqlDataReader dr=cmd.ExecuteReader();
		while(dr.Read())
		{
			Console.WriteLine((string)dr["col1"]+"  "+(int)dr["col2"]+"   "+(float)dr["col3"]);
		}
		dr.Close();
		CloseConnection();
	}
}



И в том, и в другом случае ничего не получаю в результате. В дебаге в цикл while не попадает, т.е. проскакивает его, ошибок тоже нет.
Эквивалентный запрос типа select col1, col2.... работает на ура. Аналогичная процедура, только без параметра, вызывается и возвращает данные без проблем.
Что не так?
Спасибо.
...
Рейтинг: 0 / 0
Как правильно передать параметр в ХП MySql из C#?
    #38029508
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V7T,
а почему параметр сабака?
...
Рейтинг: 0 / 0
Как правильно передать параметр в ХП MySql из C#?
    #38029510
V7T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V7T
Гость
Где-то в степи,
и без нее пробовал, результат тот же.
...привычка после MsSql
...
Рейтинг: 0 / 0
Как правильно передать параметр в ХП MySql из C#?
    #38029512
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V7T, всю жись было - ?
...
Рейтинг: 0 / 0
Как правильно передать параметр в ХП MySql из C#?
    #38029526
V7T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V7T
Гость
Где-то в степи,
В чем ошибка?
...
Рейтинг: 0 / 0
Как правильно передать параметр в ХП MySql из C#?
    #38029532
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте так: string sql=string.Format("call GetRows(?param1);");
......
param.ParameterName="param1";
это кросплатформенно для всех провайдеров, не зависимо от версии.
...
Рейтинг: 0 / 0
Как правильно передать параметр в ХП MySql из C#?
    #38029535
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон
попробуйте так: string sql=string.Format("call GetRows(?);");
......
param.ParameterName="param1";
это кросплатформенно для всех провайдеров, не зависимо от версии.
...
Рейтинг: 0 / 0
Как правильно передать параметр в ХП MySql из C#?
    #38029539
V7T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V7T
Гость
Где-то в степи,
нет к сожалению...
...
Рейтинг: 0 / 0
Как правильно передать параметр в ХП MySql из C#?
    #38029549
V7T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V7T
Гость
Где-то в степипардон
попробуйте так: string sql=string.Format("call GetRows(?);");
......
param.ParameterName="param1";
это кросплатформенно для всех провайдеров, не зависимо от версии.

MySql.Data.MySqlClient.MySqlException: Fatal error encountered during command execution. ---> System.Exception: Parameter '?' must be defined.
at MySql.Data.MySqlClient.Statement.SerializeParameter (MySql.Data.MySqlClient.MySqlParameterCollection parameters, MySql.Data.MySqlClient.MySqlPacket packet, System.String parmName) [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.Statement.InternalBindParameters (System.String sql, MySql.Data.MySqlClient.MySqlParameterCollection parameters, MySql.Data.MySqlClient.MySqlPacket packet) [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.Statement.BindParameters () [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.Statement.Execute () [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.PreparableStatement.Execute () [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (CommandBehavior behavior) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (CommandBehavior behavior) [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader () [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) MySql.Data.MySqlClient.MySqlCommand:ExecuteReader ()
at MySQL_app.MainClass.GetHotels (System.String hotel) [0x0006d] in /home/v7t/MySQL_app/MySQL_app/Main.cs:112
at MySQL_app.MainClass.Main (System.String[] args) [0x0000c] in /home/v7t/MySQL_app/MySQL_app/Main.cs:131
...
Рейтинг: 0 / 0
Как правильно передать параметр в ХП MySql из C#?
    #38029565
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V7T,
что у меня на разных провайдерах по разному себя ведет ( на утро глядя)
вот на 6.4.4.0
работает
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 public static void GetRows(string param1)
        {
            using (var cmd = new MySqlCommand
            {
                CommandText = "CALL GetRows(?param1)",
                Connection = new MySqlConnection("Data Source=127.0.0.1; Database=test;User ID=root;Password=;port=3306;charset=utf8;"),
            })
            {
                cmd.Parameters.Add("param1", param1);
                cmd.Connection.Open();
                using (var dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        .............
                    }
                }
            }
        }


на не именованых не хочет, на 1.0 9 , наоборот.
...
Рейтинг: 0 / 0
Как правильно передать параметр в ХП MySql из C#?
    #38029575
V7T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V7T
Гость
Где-то в степи,
Спасибо большое.
Кажись (так оно и есть) нужно было всего лишь кодировку к строке подключения добавить.
Работает как при "@", так и "?".
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно передать параметр в ХП MySql из C#?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]