необходимо получить автоинкремент, где тип данных в базе данных "Int" - PullRequest
0 голосов
/ 16 октября 2018

Я хотел бы знать, как получить автоинкремент для MRF No.при отправке данных в базу данных.Как и в начале MRF нет.это 2018001, а следующий будет 2018002.

Код:

private void getMRF_No()
    {
        string year = DateTime.Now.Year.ToString();
        int mrf = 0;
        string mrfNo = "";
        database db = new database();
        string conn = db.MRF();
        SqlConnection connUser = new SqlConnection(conn);
        SqlCommand cmd = connUser.CreateCommand();
        SqlDataReader sdr = null;

        string query = "SELECT TOP 1 MRF_NO FROM MRF_DETAILS ORDER BY MRF_NO DESC";

        connUser.Open();
        cmd.CommandText = query;
        sdr = cmd.ExecuteReader();

        while (sdr.Read())
        {
            mrfNo = sdr.GetString(0);
        }

        if (mrfNo == "")
        {

            mrfNo = Convert.ToString(year) + "" + 10001;
        }
        mrf += 1;
        txtMRFNo.Text = Convert.ToString(year) + "" + mrfNo;

        connUser.Close();

    }

Кажется, я получаю сообщение об ошибке "Преобразованиеnvarchar значение '2018201810001' переполнило столбец int. Я хотел бы знать любой способ улучшить это, чтобы заставить код работать.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Использовать тип данных unsignedInt.

int range:            -2,147,483,648 to +2,147,483,647 
unsignedInt range:     0 to 4,294,967,295 
long/bigint range:    -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

Ваше значение '2018201810001' превышает максимальное значение int 2 2 147 483 647 и, таким образом, выдает ошибку

Так что измените тип данных 'mrf' с 'int' на uint».Если вы считаете, что значения других столбцов могут превышать диапазон int, измените также их тип данных.

Если значение uint все еще мало, используйте вместо него long / bigint.

0 голосов
/ 16 октября 2018

Привет, я хотел бы упростить ваш код, вам не нужно менять тип данных в базе данных, если вы думаете, что MRF_No никогда не превысит диапазон int.

private void getMRF_No()
{
     string year = DateTime.Now.Year.ToString();

    //you can add number within SQL, it is not recommend to use IsNull, you can remove 
    //IsNUll(MRF_NO,0) and just use MRF_NO, if you think MRF_NO will never be NULL
    string query = "SELECT TOP 1 IsNUll(MRF_NO,0) +1 [MRF_NO] FROM MRF_DETAILS ORDER BY MRF_NO DESC"; 


    var dt = new DataTable();
    using(var sqlAdapter = new SqlDataAdapter(query, new SqlConnection(conn)))
    {
        sqlAdapter.Fill(dt);
    }

    var mrfNo= (dt.Rows.Count > 0) ? Int64.Parse(dt.Rows[0][0].ToString()) : 1; 

    //year is already string,do not have to convert and ToString method of Int can format 
    // your number
    txtMRFNo.Text = year + mrfNo.ToString("000");
}
0 голосов
/ 16 октября 2018

Диапазон типа данных int составляет от 2 147 483 648 до 2 147 483 647

Измените тип данных столбца, содержащий идентификатор, на тип bigint

Диапазон bigint тип данных: от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807

(bigint такой же, как тип long в .net)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...