Действительно ли интервал является 64-разрядным целым числом в 64-разрядном C#?

[Изменить: добавлено «выберите» перед ссылками на 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);

28
задан Peter Mortensen 27 June 2015 в 08:44
поделиться

8 ответов

Нет. Спецификация C# твердо определяет, это int является псевдонимом для System.Int32 точно с 32 битами. Изменение этого было бы основное повреждающееся изменение.

46
ответ дан Jon Skeet 20 November 2019 в 01:50
поделиться

Неважно, ли Вы используете 32-разрядную версию, или 64-разрядная версия CLR, в C# int будет всегда означать System.Int32, и long будет всегда означать System.Int64.

3
ответ дан Mark Cidade 20 November 2019 в 01:50
поделиться

Да, как Jon сказал, и в отличие от 'мира C/C++', Java и C# не зависят от системы, на которой они работают. Они строго определили длины для байта/закорачивать/интервала/длинного и единственных плаваний / плаваний двойной точности, равных в каждой системе.

0
ответ дан Peter Mortensen 20 November 2019 в 01:50
поделиться

Согласно спецификации C# ECMA-334, раздел "11.1.4 Простые типы", зарезервированное слово int будет псевдонимом для System.Int32. Так как это указано в спецификации, маловероятно, что это изменится.

4
ответ дан 20 November 2019 в 01:50
поделиться

Будет ли 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 меняет свой размер на разных архитектурах.

17
ответ дан 20 November 2019 в 01:50
поделиться

Ключевое слово int в C # определено как псевдоним для типа System.Int32 , и это (судя по названию) предназначено для 32-битное целое число. К спецификации:

Спецификация CLI раздел 8.2.2 (Встроенные значения и ссылочные типы) содержит таблицу со следующим:

  • System.Int32 - 32-битное целое число со знаком

Спецификация C # раздел 8.2.1 (Предопределенные типы) имеет аналогичную таблицу:

  • int - 32-битный целочисленный тип со знаком

Это гарантирует, что оба System.Int32 в среде CLR а int в C # всегда будет 32-битным.

43
ответ дан 20 November 2019 в 01:50
поделиться

int всегда является синонимом Int32 на всех платформах.

Очень маловероятно, что Microsoft изменит это в будущем, поскольку это нарушит многие существующие коды, предполагающие, что int 32-битный.

11
ответ дан 20 November 2019 в 01:50
поделиться

Я думаю, что вас может смутить то, что int является псевдонимом для Int32, поэтому он всегда будет 4 байта, но IntPtr должен соответствовать размеру слова архитектуры процессора, поэтому он будет 4 байта на 32-битной системе и 8 байт на 64-битной.

5
ответ дан 20 November 2019 в 01:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: