Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 用于为插入SQL Server 2008 R2的每一行生成唯一ID的C代码_C#_C# 4.0_Sql Server 2008 R2_Unique Id - Fatal编程技术网

C# 用于为插入SQL Server 2008 R2的每一行生成唯一ID的C代码

C# 用于为插入SQL Server 2008 R2的每一行生成唯一ID的C代码,c#,c#-4.0,sql-server-2008-r2,unique-id,C#,C# 4.0,Sql Server 2008 R2,Unique Id,我编写了一个惟一的ID生成函数,它在每次将新行插入数据库时生成一个ID。但有时它为每一行提供相同的ID。我不知道当时到底发生了什么问题。我为您提供了用于插入数据库的代码和用于生成ID的代码。请检查代码并告诉我是否存在任何逻辑错误- // Daily sales report entry codeing………………………………………………………………………………………………………………… public string GetSalesTeam(SalesTeam st) { try

我编写了一个惟一的ID生成函数,它在每次将新行插入数据库时生成一个ID。但有时它为每一行提供相同的ID。我不知道当时到底发生了什么问题。我为您提供了用于插入数据库的代码和用于生成ID的代码。请检查代码并告诉我是否存在任何逻辑错误-

// Daily sales report entry codeing…………………………………………………………………………………………………………………
public string GetSalesTeam(SalesTeam st)
{
        try
        {
            SqlConnection con = SqlConnDAC.CreateConn();
            SqlCommand cmd = new SqlCommand("Insert into DSR values(@v1,@v2,@v3,@v4,@v5,@v6,@v7,@v8,@v9,@v10,@v11,@v12,@v13,@v14,@v15,@v16)", con);

            IDGen.varr   = DSR_IDGen(); //Calling id generate function 

            cmd.Parameters.AddWithValue("@v1", st.Sl_No);
            cmd.Parameters.AddWithValue("@v2", st.User_ID);
            cmd.Parameters.AddWithValue("@v3", st.Name);
            cmd.Parameters.AddWithValue("@v4", st.Branch);
            cmd.Parameters.AddWithValue("@v5", st.Desg);
            cmd.Parameters.AddWithValue("@v6", st.Visiting_Date);
            cmd.Parameters.AddWithValue("@v7", st.Name_Of_Client);
            cmd.Parameters.AddWithValue("@v8", st.Address);
            cmd.Parameters.AddWithValue("@v9", st.PhNo);
            cmd.Parameters.AddWithValue("@v10",Convert.ToInt32(st.QuoteValue));
            cmd.Parameters.AddWithValue("@v11", st.Remarks);
            cmd.Parameters.AddWithValue("@v12", st.Source);

            cmd.Parameters.AddWithValue("@v13",IDGen.varr);

            cmd.Parameters.AddWithValue("@v14", st.Month);
            cmd.Parameters.AddWithValue("@v15", st.Year);
            cmd.Parameters.AddWithValue("@v16",Convert.ToInt32(st.ClosedValue));
           // cmd.Parameters.AddWithValue("@v17", st.TypeOfCall);

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            return "Success and DSR No.for_ "+st.Name_Of_Client+" = "+IDGen.varr+"";
        }
        catch (Exception e)
        {
            return e.ToString();
        }
}

//ID generate function………………………………………………………..
public string DSR_IDGen()
{
    int i = 0;
    string temp;

    string var;
    var = ("DSR-" + i.ToString()).Trim();
    SqlConnection conID = SqlConnDAC.CreateConn();

    SqlCommand cmdd = new SqlCommand("select DSR_No from DSR", conID);
    conID.Open();

    SqlDataReader dr = cmdd.ExecuteReader();

    while (dr.Read())
    {
        temp = (dr[0].ToString()).Trim();

        if (var == temp)
        {
           i = i + 1;
           var = ("DSR-" + i.ToString()).Trim();
           continue;
        }
    }

    dr.Close();
    conID.Close();

    return var;
}

// a static variable that holds the ID............................
public class IDGen
{
   public static string varr;
}

一句忠告:不要试图让这件事变得更加困难,也不要试图智胜SQL Server。为什么不直接使用数据库提供的机制来实现这一点:一个
IDENTITY

我建议您使用:

  • 一个
    ID INT-IDENTITY(1,1)
    列,用于让SQL Server处理数值的自动增量
  • 一个计算的、持久的列,用于将该数值转换为所需的值
所以试试这个:

CREATE TABLE dbo.DSR
  (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
   DsrID AS 'DSR-' + RIGHT('00000000' + CAST(ID AS VARCHAR(8)), 8) PERSISTED,
   .... your other columns here....
  )
现在,每次在未指定
ID
DsrID
值的情况下将行插入
DSR

INSERT INTO dbo.DSR(Col1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)

然后SQL Server将自动且安全地增加您的
ID
值,
DsrID
将包含类似于
DSR-0000001
DSR-0000002
,。。。。。。诸如此类—自动、安全、可靠、无重复。

一句忠告:不要试图让这件事变得更加困难,也不要试图智胜SQL Server。为什么不直接使用数据库提供的机制来实现这一点:一个
IDENTITY

我建议您使用:

  • 一个
    ID INT-IDENTITY(1,1)
    列,用于让SQL Server处理数值的自动增量
  • 一个计算的、持久的列,用于将该数值转换为所需的值
所以试试这个:

CREATE TABLE dbo.DSR
  (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
   DsrID AS 'DSR-' + RIGHT('00000000' + CAST(ID AS VARCHAR(8)), 8) PERSISTED,
   .... your other columns here....
  )
现在,每次在未指定
ID
DsrID
值的情况下将行插入
DSR

INSERT INTO dbo.DSR(Col1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)

然后SQL Server将自动且安全地增加您的
ID
值,
DsrID
将包含类似于
DSR-0000001
DSR-0000002
,。。。。。。等等-自动、安全、可靠、无重复。

@SougataPaul:如果这个答案帮助你解决了问题,那么请。这将表明你对那些花时间帮助你的人的感激。@SougataPaul:如果这个答案帮助你解决了问题,那么请。这将表达你对那些花自己的时间帮助你的人的感激之情。