Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要在数据库中的数据类型为“时自动递增”;Int";_C#_Sql_Asp.net - Fatal编程技术网

C# 需要在数据库中的数据类型为“时自动递增”;Int";

C# 需要在数据库中的数据类型为“时自动递增”;Int";,c#,sql,asp.net,C#,Sql,Asp.net,我想知道如何获得MRF No的自动增量。向数据库提交数据时。如起始MRF编号为2018001,下一个MRF编号为2018002 代码: private void getMRF_No() { string year = DateTime.Now.Year.ToString(); int mrf = 0; string mrfNo = ""; database db = new database(); strin

我想知道如何获得
MRF No
的自动增量。向数据库提交数据时。如起始MRF编号为
2018001
,下一个MRF编号为
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列。我想知道有什么方法可以改进它以使代码正常工作


谢谢!

int数据类型的范围是-2147483648到2147483647

将保存ID的列数据类型更改为
bigint

bigint
数据类型的范围是-9223372036854775808到9223372036854775807


(bigint与.net中的
long
类型相同)

使用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”超过最大整数值2147483647,因此引发错误

所以,将“mrf”的数据类型从“int”更改为“uint”。如果您认为其他列值可能超过int范围,那么也更改它们的数据类型


如果“uint”仍然很小,请使用“long/bigint”。

嗨,我想简化您的代码,如果您认为MRF\u 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");
}

您可能需要更改(我假设是slq服务器?)列的数据类型,该列的id类型为
bigint
long
in.net)在
20181009
之后是什么?它的
201810010
20181021
首先执行
mrfNo=Convert.ToString(year)+”“+10001
然后
txtMRFNo.Text=Convert.ToString(年份)+”“+mrfNo--这意味着您添加年份twiceI假设
MRF\u NO
是一个int列?为什么要在代码中将其作为字符串进行读取和操作(
mrfNo
)?你不是真的在使用
mrf
,你的意思是吗?如果你的当前年份
2019
,并且你的查询返回
2018…
,那么你认为你的自动增量是如何工作的?tbh我想像我的问题所说的那样将其作为20181001发送。问题是,当我在数据库中更改MRF_No的数据类型时,如果成功,它最终会变成“2018201810001”。然后下一个将是“20182018201810001”。我希望它会是20181001,然后是20181002,之后看起来就像你在添加它或什么。如果您需要我的建议,请使用int类型的普通Pk标识列。然后在另一列中,您有“描述性”ID.txtMRFNo.Text=Convert.ToString(year)+“+mrfNo;您正在代码中第二次将年份作为字符串添加。你加了两次,我想这是你的问题。关于十进制用法的错误建议-我希望那是一个错误typo@JohnB是的,你是对的ulong’会是更好的选择。嗯,我们需要用数据库的语言或术语来交谈——我假设它是sql server。所以答案应该是
bigint
如何更改它,使其显示20181001,然后下一个是20181002,然后??