Xpoint
   [напомнить пароль]

C# и Firebird

Метки: [без меток]
2009-06-16 23:30:18 [обр] NaN[досье]

Необходимо записать данные в таблицу structure_one. В результате выполнения данного кода в таблица создается новая запись, но все поля - null (кроме той, где генератор). Возможно, что-то не так с типами данных (пробовал Char и BSTR)?

OleDbConnection con = new OleDbConnection("Provider=LCPI.IBProvider.3;Persist Security Info=False;User ID=SYSDBA;Password=masterkey;Data Source='';Location=C:\\123\\1.FDB;ctype=UNICODE_FSS");
con.Open();
OleDbTransaction trans = con.BeginTransaction();
OleDbCommand cmd;

Bitmap bmp = new Bitmap(pictureBox1.Image);
OleDbParameter blob = new OleDbParameter();
blob.OleDbType = OleDbType.LongVarBinary;
blob.Value = (byte[])TypeDescriptor.GetConverter(bmp).ConvertTo(bmp, typeof(byte[]));

cmd = new OleDbCommand("INSERT INTO structure_one(id_structure, name,formula,id_type,energy,heat,form) VALUES(GEN_ID(GEN_STRUCT, 1),?,?,?,?,?,?) ", con, trans);
cmd.Parameters.Add(textBox3.Text,OleDbType.Char);
cmd.Parameters.Add(textBox2.Text,OleDbType.Char);
cmd.Parameters.Add(Convert.ToString(comboBox2.SelectedIndex + 1),OleDbType.Integer);
cmd.Parameters.Add(textBox4.Text,OleDbType.Double);
cmd.Parameters.Add(textBox5.Text, OleDbType.Double);
cmd.Parameters.Add(blob);
cmd.ExecuteNonQuery();
trans.Commit();
con.Close();

Также пытался с именнованной формой записи параметров - то же самое
            cmd = new OleDbCommand("INSERT INTO structure_one(id_structure, name,formula,id_type,energy,heat,form) VALUES(GEN_ID(GEN_STRUCT, 1), :name,:formula,:id_type,:energy,:heat,:form) ", con, trans);
            cmd.Parameters.AddWithValue("name",Convert.ToString(textBox3.Text));
            cmd.Parameters.AddWithValue("formula", Convert.ToString(textBox2.Text));
            cmd.Parameters.AddWithValue("id_type",Convert.ToInt32(comboBox2.SelectedIndex + 1));
            cmd.Parameters.AddWithValue("energy",Convert.ToDouble(textBox4.Text));
            cmd.Parameters.AddWithValue("heat",Convert.ToDouble(textBox5.Text));
            cmd.Parameters.AddWithValue("form",blob);
            cmd.ExecuteNonQuery();

Структура таблицы structure_one
ID_STRUCTURE INTEGER
NAME CHAR (1000)
FORMULA CHAR(1000)
ID_TYPE INTEGER
ENERGY DOUBLE PRECISION
HEAT DOUBLE PRECISION
FORM BLOB SUB_TYPE 0 SEGMENT SIZE 80

спустя 1 день [обр] NaN[досье]
Проблема решена. Корректный код:
OleDbConnection con = new OleDbConnection("Provider=LCPI.IBProvider.3;Persist Security Info=False;User ID=SYSDBA;Password=masterkey;Data Source='';Location=C:\\123\\1.FDB;ctype=UNICODE_FSS");
con.Open();
OleDbTransaction trans = con.BeginTransaction();
OleDbCommand cmd;
cmd = new OleDbCommand("INSERT INTO structure_one(id_structure, name,formula,id_type,energy,heat,form) VALUES(GEN_ID(GEN_STRUCT, 1),?,?,?,?,?,?) ", con, trans);
cmd.Parameters.AddWithValue("name", textBox3.Text);
cmd.Parameters.AddWithValue("formula", textBox2.Text);
cmd.Parameters.AddWithValue("id_type", comboBox2.SelectedIndex + 1);
cmd.Parameters.AddWithValue("energy", Convert.ToDouble(textBox4.Text));
cmd.Parameters.AddWithValue("heat", Convert.ToDouble(textBox5.Text));
Bitmap bmp = new Bitmap(pictureBox1.Image);
OleDbParameter blob = new OleDbParameter();
blob.OleDbType = OleDbType.LongVarBinary;
blob.Value = (byte[])TypeDescriptor.GetConverter(bmp).ConvertTo(bmp, typeof(byte[]));
cmd.Parameters.Add(blob);
cmd.ExecuteNonQuery();
Powered by POEM™ Engine Copyright © 2002-2005