[Изменить: добавлено «выберите» перед ссылками на last_insert_id ()]
Как насчет запуска «select last_insert_id();
» после вашей вставки?
MySqlCommand comm = connect.CreateCommand();
comm.CommandText = insertInvoice;
comm.CommandText += "\'" + invoiceDate.ToString("yyyy:MM:dd hh:mm:ss") + "\', "
+ bookFee + ", " + adminFee + ", " + totalFee + ", " + customerID + ");";
+ "select last_insert_id();"
int id = Convert.ToInt32(comm.ExecuteScalar());
Изменить : Как упоминалось в duffymo, вы действительно хорошо служили бы с параметризованными запросами , подобными этому .
Редактирование: пока вы не перейдете к параметризованной версии, вы можете найти string.Format:
comm.CommandText = string.Format("{0} '{1}', {2}, {3}, {4}, {5}); select last_insert_id();",
insertInvoice, invoiceDate.ToString(...), bookFee, adminFee, totalFee, customerID);
Нет. Спецификация C# твердо определяет, это int
является псевдонимом для System.Int32
точно с 32 битами. Изменение этого было бы основное повреждающееся изменение.
Неважно, ли Вы используете 32-разрядную версию, или 64-разрядная версия CLR, в C# int
будет всегда означать System.Int32
, и long
будет всегда означать System.Int64
.
Да, как Jon сказал, и в отличие от 'мира C/C++', Java и C# не зависят от системы, на которой они работают. Они строго определили длины для байта/закорачивать/интервала/длинного и единственных плаваний / плаваний двойной точности, равных в каждой системе.
Согласно спецификации C# ECMA-334, раздел "11.1.4 Простые типы", зарезервированное слово int
будет псевдонимом для System.Int32
. Так как это указано в спецификации, маловероятно, что это изменится.
Будет ли sizeof(testInt) когда-нибудь равен 8?
Нет, sizeof(testInt) - это ошибка. testInt - это локальная переменная. Оператор sizeof требует в качестве аргумента тип. Это никогда не будет 8, потому что это всегда будет ошибкой.
VS2010 компилирует управляемое c# целое число как 4 байта даже на 64-битной машине.
Правильно. Отмечу, что раздел 18.5.8 спецификации C# определяет sizeof(int)
как константу времени компиляции 4. То есть, когда вы говорите sizeof(int)
, компилятор просто заменяет его на 4; это так же, как если бы вы сказали "4" в исходном коде.
Кто-нибудь знает, наступит ли время, когда стандартный "int" в C# будет 64-битным?
Никогда. В разделе 4.1.4 спецификации C# говорится, что "int" - это синоним "System.Int32".
Если вам нужно "целое число размером с указатель", то используйте IntPtr. IntPtr меняет свой размер на разных архитектурах.
Ключевое слово int
в C # определено как псевдоним для типа System.Int32
, и это (судя по названию) предназначено для 32-битное целое число. К спецификации:
Спецификация CLI раздел 8.2.2 (Встроенные значения и ссылочные типы) содержит таблицу со следующим:
System.Int32
- 32-битное целое число со знакомСпецификация C # раздел 8.2.1 (Предопределенные типы) имеет аналогичную таблицу:
int
- 32-битный целочисленный тип со знаком
Это гарантирует, что оба System.Int32
в среде CLR а int
в C # всегда будет 32-битным.
int
всегда является синонимом Int32
на всех платформах.
Очень маловероятно, что Microsoft изменит это в будущем, поскольку это нарушит многие существующие коды, предполагающие, что int
32-битный.
Я думаю, что вас может смутить то, что int
является псевдонимом для Int32
, поэтому он всегда будет 4 байта, но IntPtr
должен соответствовать размеру слова архитектуры процессора, поэтому он будет 4 байта на 32-битной системе и 8 байт на 64-битной.