0

每当我尝试在此表中插入新行时,都会出现无法修改列的错误(因为它是主键)。所以我将它从查询中排除,但随后它返回查询和列数不同。如何使用主键添加行?

这是要插入的代码:

var getmessages = new SqlCeCommand("Insert into chat values('" + txtSend.Text + "', '" + Environment.UserName + "', '" + user + "', '" + Environment.UserName + "', '" + DateTime.Now.ToShortTimeString() + "', '" + DateTime.Now.ToString() + "', '"+UID+"')", con);

这是我通过查询添加的主键(因为它是对数据库的更新)...

alter table chat add c_id int identity primary key

然后它向我抛出错误在此处输入图像描述

如果我从插入查询中删除(UID),我会收到此错误...

在此处输入图像描述

4

4 回答 4

5

您需要准确地告诉 SQL CE 您要插入哪些列。

第一个问题不是因为它是主键。这是因为密钥是一个识别字段并为您自动生成。所以,让我们继续。

第二个问题只是您没有指定要插入的列。

插入应如下所示:

insert into chat(field1, field2, field3) values('val1', 'val2', 'val3')

注意字段名称。您必须将您拥有的实际字段名称放在那里。

也就是说,代码仍然很糟糕。尽管上述方法有效,但您确实应该参数化您的查询。即使假设这个程序从未真正发布到现实世界中,并假设如果有人入侵它你可能不在乎......以正确的方式做事仍然是一个好习惯。哦..你不会有'标记问题..这会导致你的应用程序崩溃。

于 2013-10-01T00:50:27.330 回答
1

您需要在查询中指定除主键之外的所有列:

Insert into chat (column1, column2, ...) values (...)
于 2013-10-01T00:50:18.833 回答
0

您的代码中有严重的 SQL 错误;您必须使用参数并指定每一列:

var insert = new SqlCeCommand("Insert into chat (sendCol, firstNameCol, secondNameCol, firstTimeCol, secondTimeCol, uidCol) values (@send, @name, @name, @time, @time, @uid)";
insert.Parameters.Add(new SqlCeParameter("@send", txtSend.Text));
insert.Parameters.Add(new SqlCeParameter("@name", Environment.UserName));
insert.Parameters.Add(new SqlCeParameter("@time", DateTime.Now));
insert.Parameters.Add(new SqlCeParameter("@uid", Something));
于 2013-10-01T01:02:18.863 回答
0

您还需要在查询中使用值定义参数,如下所示。

  insert into table(f1,f2,f3) values(v1,v2,v3)
于 2013-10-01T07:09:57.597 回答