每当我尝试在此表中插入一个新行时,它就会给我一个错误,即我无法修改该列(因为它是主键)。所以我从查询中排除它,但它返回查询和列数不同。如何使用主键添加行?
以下是要插入的代码:
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),我会收到此错误...
答案 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)