我编写了一个唯一的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; }
marc_s.. 5
一句建议:不要试图让它变得更难,并且不要试图超越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.... )
现在,每次插入行DSR
而不指定ID
或的值DsrID
:
INSERT INTO dbo.DSR(Col1, Col2, ..., ColN) VALUES (Val1, Val2, ....., ValN)
那么SQL Server将自动,安全地增加你的ID
价值,DsrID
将包含类似的值DSR-0000001
,DSR-0000002
,......等等-自动,安全,可靠,无重复.