#c# #mysql
#c# #mysql
Вопрос:
Не уверен, что с этим не так
//Setup MySQL
private MySqlConnection datconnection = new MySqlConnection();
//private MySqlDataAdapter datdata = new MySqlDataAdapter();
DataGrid datgridInfo = new DataGrid();
int connect;
private Form_NewEnquiry frm_parent;
public Form_AddVenue(Form_NewEnquiry frm1)
{
InitializeComponent();
frm_parent = frm1;
}
private void btnAdd_Click(object sender, EventArgs e)
{
connect = 0;
try
{
datconnection.ConnectionString =
"server=127.0.0.1;"
"database=as;"
"uid=a;"
"password=a;";
connect = 1;
}
catch (Exception)
{
MessageBox.Show("Connection Unavailable");
}
//INSERT SQL Code to Insert Venue
if (connect == 1)
{
try
{
datconnection.Open();
MySqlCommand command = new MySqlCommand("INSERT INTO venues (venue_name,venue_address1,venue_address2,venue_town,venue_county,venue_postcode,venue_telephone,venue_fax,venue_email,venue_web,venue_maxguests) VALUES (?,?,?,?,?,?,?,?,?,?,?)", datconnection);
command.Parameters.Add("name", MySqlDbType.VarChar, 45, tbName.Text.ToString());
command.Parameters.Add("address1", MySqlDbType.VarChar, 45, tbAddress1.Text.ToString());
command.Parameters.Add("address2", MySqlDbType.VarChar, 45, tbAddress2.Text.ToString());
command.Parameters.Add("town", MySqlDbType.VarChar, 45, tbTown.Text.ToString());
command.Parameters.Add("county", MySqlDbType.VarChar, 45, tbCounty.Text.ToString());
command.Parameters.Add("postcode", MySqlDbType.VarChar, 10, tbPostcode.Text.ToString());
command.Parameters.Add("telephone", MySqlDbType.VarChar, 15, tbTelephone.Text.ToString());
command.Parameters.Add("fax", MySqlDbType.VarChar, 15, tbFax.Text.ToString());
command.Parameters.Add("email", MySqlDbType.VarChar, 255, tbEmail.Text.ToString());
command.Parameters.Add("web", MySqlDbType.VarChar, 255, tbWeb.Text.ToString());
command.Parameters.Add("maxguests", MySqlDbType.Int32, 11, nudNoOfGuests.Value.ToString());
command.ExecuteNonQuery();
//datdata.InsertCommand = command;
}
catch (Exception eea)
{
MessageBox.Show("Error storing data");
MessageBox.Show(eea.ToString());
connect = 0;
}
finally
{
datconnection.Close();
}
}
if (connect == 1)
{
MessageBox.Show("Data Saved");
//Print
//Close Window
frm_parent.reloadVenue();
this.Close();
}
}
Это выдает мне системную ошибку.Исключение FormatException: Индекс (основанный на нуле) должен быть больше или равен нулю и меньше размера списка аргументов.
Комментарии:
1. какая строка выдает исключение?
2. На
command.ExecuteNonQuery();
3. Я исправил это, просто закодировав строку SQL без команды. Параметры. Добавить (вместо этого строка SQL содержит объединенные значения. Я знаю, что при этом существует риск внедрения SQL, однако это всего лишь небольшая внутренняя система.
Ответ №1:
Похоже, что размер некоторых данных больше, чем размер указанного вами параметра. например
command.Parameters.Add("name", MySqlDbType.VarChar, 45, tbName.Text);
это размер tbName.Текстовая строка меньше 45. как насчет использования
command.Parameters.Add("name", MySqlDbType.VarChar, tbName.Text.Length, tbName.Text);
Комментарии:
1. Здравствуйте, спасибо за это — однако при изменении выдается та же ошибка. Я использовал здесь статические длины, поскольку это длина MySQL, поэтому генерирую правильное исключение, когда значения длиннее, чем примет MySQL.
Ответ №2:
Вам не нужен toString() в свойстве Text, это уже строка, пожалуйста, избегайте этого.
Также
command.Parameters.Add("maxguests", MySqlDbType.Int32, 11, nudNoOfGuests.Value.ToString())
Ожидается ввод параметра int, и вы передаете строку, пожалуйста, используйте Convert.ToInt32 для передачи значения.
Обычно эти ошибки возникают из-за разницы в количестве объявленных и переданных команде параметров, но в вашем случае все в порядке. Какой тип элемента управления — nudNoOfGuests, возможно, это вызывает ошибку формата
Комментарии:
1. Привет, спасибо за вашу помощь — однако значение . toString () должен быть там в качестве параметров. Add всегда ожидает, что 4-й параметр будет строкой. Изменение этого на
command.Parameters.Add("maxguests", MySqlDbType.Int32, 11, 10);
выдает «Аргумент 4 не удается преобразовать из int в string», однако я согласен, что toString () не требуется для текстового свойства — сила habbit2. Итак, nudNoOfGuests возвращает допустимое значение?
3. Да — Однако даже при жестком кодировании строка целого числа в этом не выполняется
4. Можете ли вы попробовать то же самое, изменив параметры как ?name,?address1,?address2 … и так далее