C# 使用C上的LINQ向SQL Server数据库插入值
我有这样的代码C# 使用C上的LINQ向SQL Server数据库插入值,c#,sql-server,linq,C#,Sql Server,Linq,我有这样的代码 MsCustomer mc = new MsCustomer { CustomerID=idBox.Text, CustomerName=nameBox.Text, CustomerGender=gender, CustomerPhone=phoneBox.Text, CustomerAddress=addressBox.Text }; dc.MsCustomers.InsertOnSubmit(mc); dc.SubmitCha
MsCustomer mc = new MsCustomer
{
CustomerID=idBox.Text,
CustomerName=nameBox.Text,
CustomerGender=gender,
CustomerPhone=phoneBox.Text,
CustomerAddress=addressBox.Text
};
dc.MsCustomers.InsertOnSubmit(mc);
dc.SubmitChanges();
MessageBox.Show("Insert Success");
generateID();
当我执行程序时,数据并没有真正插入到SQL Server数据库中,因此不会生成ID。如果数据库上的代码是CS003,则仍然是CS003。但是在应用程序上它已经被插入了,所以当我用值CS003再次插入它时,它说不能创建重复的密钥ID
你们能帮帮我吗?这个代码怎么了
这是我写的
private string generateID()
{
try
{
var ID = (from x in dc.MsCustomers
orderby x.CustomerID descending
select x).First();
int substring = int.Parse(ID.CustomerID.ToString().Substring(2)) + 1;
string temp = "CS" + String.Format("{0:000}", substring);
return temp;
}
catch (Exception)
{
string first = "C0001";
return first;
}
}
您的generateID方法完全有可能完美地工作。代码中没有意义的是如何使用它 将数据插入数据库后,只需调用它。它返回一个字符串,不返回任何内容。也许您打算更改idBox.Text属性的值,然后插入此值,但您没有,我们也不知道,因此我假设您希望generateID为您的实体生成ID,在这种情况下,idBox本身已过时。 在我看来,让用户选择数据的主键/id几乎从来都不是一个好主意 您可能希望实现以下目标:
MsCustomer mc = new MsCustomer
{
/* new line */
CustomerID = generateID();
CustomerName=nameBox.Text,
CustomerGender=gender,
CustomerPhone=phoneBox.Text,
CustomerAddress=addressBox.Text
};
dc.MsCustomers.InsertOnSubmit(mc);
dc.SubmitChanges();
MessageBox.Show("Insert Success");
如果您被告知第二次尝试插入一个副本,那么显然第一次插入了数据。@jmcilhinney是的,它说我尝试插入一个副本密钥,但当我生成id时,客户id仍然是CS003,它应该是CS004,因为CS003已经插入。我试图将copy to output目录更改为copy always,但没有效果,很抱歉英语不好:那么您的generateID方法就不起作用了。我们对这种方法一无所知,所以我们必须通灵才能知道它到底出了什么问题。@jmcilhinney谢谢你的关注,我更新了我的帖子,我已经写了generateIyes,我写了一个代码,就像你以前写的一样,但是插入不起作用,所以我认为当我把generateid放在submitchanges下时,数据库会被刷新。哈哈哈,我是一个初学者,对此很抱歉。