Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ExecuteScalar

57K
19 апреля 2010 года
DjShumer
6 / / 19.04.2010
Меняю базу данных с Access на MySql в клиентском приложении. Использую Connector/Net 6.2.1 (то есть ADO.net)
Ошибка
An unhandled exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dll

Additional information: Fatal error encountered during command execution.

в следующем коде
MySqlConnection connect = new MySqlConnection(Params.connStr);
connect.Open();
MySqlCommand comm = connect.CreateCommand();

comm.CommandText = "select count(*) from results where compdiscid=@cdid and memid=@mem";

comm.Parameters.Add("@cdid", MySqlDbType.Int32).Value = ((Para)cbDisciplineResult.SelectedItem).ID;
comm.Parameters.Add("@memid", MySqlDbType.Int32).Value = currentID;

object result = comm.ExecuteScalar(); //место ошибки
int cnt = 0; ;
if (result != null)
{
cnt = Convert.ToInt32(result);

}

причем если параметры занести в sql запрос напрямую то проблемы не будут
пример comm.CommandText = "select count(*) from results where compdiscid=" + ((Para)cbDisciplineResult.SelectedItem).ID + " and memid=" + currentID;

Хотел разобраться в чем дело, потому как переписывать таким способом все запросы накладно будет.
5
19 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: DjShumer

Хотел разобраться в чем дело, потому как переписывать таким способом все запросы накладно будет.


Подозреваю, что дело в @cdid и @mem. У мускуля иные префиксы параметров. Попробуйте ? и $.

5
19 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: DjShumer
пример comm.CommandText = "select count(*) from results where compdiscid=" + ((Para)cbDisciplineResult.SelectedItem).ID + " and memid=" + currentID;

Хотел разобраться в чем дело, потому как переписывать таким способом все запросы накладно будет.


Это не только накладно, а еще и опасно - прямая дорога к Sql Injection и непонятным ошибкам маршаллинга данных.

57K
19 апреля 2010 года
DjShumer
6 / / 19.04.2010
Цитата: hardcase
Подозреваю, что дело в @cdid и @mem. У мускуля иные префиксы параметров. Попробуйте ? и $.



пример из документации к драйверу

string connStr = "server=localhost;user=root;database=world;port=3306;password=******;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();

string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent=@Continent";
MySqlCommand cmd = new MySqlCommand(sql, conn);

Console.WriteLine("Enter a continent e.g. 'North America', 'Europe': ");
string user_input = Console.ReadLine();

MySqlParameter param = new MySqlParameter();
param.ParameterName = "@Continent";
param.Value = user_input;
cmd.Parameters.Add(param);

MySqlDataReader rdr = cmd.ExecuteReader();

while (rdr.Read())
{
Console.WriteLine(rdr["Name"]+" --- "+rdr["HeadOfState"]);
}

conn.Close();

то есть префиксы такие должны быть

8.2K
19 апреля 2010 года
bagie2
299 / / 26.10.2008
может быть MySqlDbType.Int32 не указывать просто? или может размерность нужно еще указать и\или направление параметров. поиграйтесь с этим делом.
57K
19 апреля 2010 года
DjShumer
6 / / 19.04.2010
Цитата: bagie2
может быть MySqlDbType.Int32 не указывать просто? или может размерность нужно еще указать и\или направление параметров. поиграйтесь с этим делом.


//comm.Parameters.Add("@cdid", ((Para)cbDisciplineResult.SelectedItem).ID);
//comm.Parameters.Add("@memid", currentID);
//comm.Parameters.AddWithValue("@cdid", ((Para)cbDisciplineResult.SelectedItem).ID);
//comm.Parameters.AddWithValue("@memid", currentID);

пробовал следующее
результат тотже
а если вот так, то работает
MySqlParameter param = new MySqlParameter();
param.ParameterName = "@cdid";
param.Value = ((Para)cbDisciplineResult.SelectedItem).ID;


MySqlParameter param1 = new MySqlParameter();
param1.ParameterName = "@mem";
param1.Value = currentID;

8.2K
19 апреля 2010 года
bagie2
299 / / 26.10.2008
Цитата:
i have the same problem with mysql connector. i have change the mysql connection now i am using the odbc connector and i got solve the problem of "Fatal error encountered during command execution"
try to use latest mysql connector this may solve your problem as well...


может и баг
хотя еще пишут, что можно попробовать добавить "allow user variables=true" в connectionString

а почему выбрали именно MySQL для миграции?

57K
19 апреля 2010 года
DjShumer
6 / / 19.04.2010
Цитата: bagie2
может и баг
хотя еще пишут, что можно попробовать добавить "allow user variables=true" в connectionString

а почему выбрали именно MySQL для миграции?



Это желание заказчика, хотя можно было бы использовать бесплатную версию MS SQLSrerver она бы им подошла я думаю.

57K
19 апреля 2010 года
DjShumer
6 / / 19.04.2010
Цитата: bagie2
может и баг
хотя еще пишут, что можно попробовать добавить "allow user variables=true" в connectionString

а почему выбрали именно MySQL для миграции?



"allow user variables=true" решил проблему, код прошел. Надеюсь далее тоже без проблем проскочит. Спасибо.

А где вы нашли эту инфу, и на что именно влияет allow user variables=true? Интересно просто в чем именно проблема.
Учитывая тот факт что параметры всетаки можно задействовать и без директивы, только очень длинно получается. Вариант описан выше.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог