在SQL数据库中插入新行因主键无法访问

时间:2013-10-01 00:45:29

标签: c# sql sql-server database

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

以下是要插入的代码:

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

然后它会抛出错误enter image description here

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

enter image description here

4 个答案:

答案 0 :(得分:5)

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

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

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

插入内容应如下所示:

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

注意字段名称。你必须把你在那里的实际字段名称。

那说,代码还是很糟糕的。虽然上面的工作,你真的真的应该参数化你的查询。即使假设这个程序实际上从未真正发布到现实世界中,并且假设如果有人闯入它就会更少关心......以正确的方式做事情仍然是一种好习惯。哦..你不会遇到'标记的问题..这会导致你的应用程序崩溃。

答案 1 :(得分:1)

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

Insert into chat (column1, column2, ...) values (...)

答案 2 :(得分: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));

答案 3 :(得分:0)

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

  insert into table(f1,f2,f3) values(v1,v2,v3)