Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 由于主键原因,无法在SQL数据库中插入新行_C#_Sql_Sql Server_Database - Fatal编程技术网

C# 由于主键原因,无法在SQL数据库中插入新行

C# 由于主键原因,无法在SQL数据库中插入新行,c#,sql,sql-server,database,C#,Sql,Sql Server,Database,每当我尝试向该表中插入新行时,就会出现一个错误,即我无法修改该列(因为它是主键)。因此我将其从查询中排除,但它返回的结果是查询和列数不同。如何添加带有主键的行 下面是要插入的代码: var getmessages = new SqlCeCommand("Insert into chat values('" + txtSend.Text + "', '" + Environment.UserName + "', '" + user + "', '" + Environment.UserName +

每当我尝试向该表中插入新行时,就会出现一个错误,即我无法修改该列(因为它是主键)。因此我将其从查询中排除,但它返回的结果是查询和列数不同。如何添加带有主键的行

下面是要插入的代码:

var getmessages = new SqlCeCommand("Insert into chat values('" + txtSend.Text + "', '" + Environment.UserName + "', '" + user + "', '" + Environment.UserName + "', '" + DateTime.Now.ToShortTimeString() + "', '" + DateTime.Now.ToString() + "', '"+UID+"')", con);
这是我通过查询添加的主键(因为它是对数据库的更新)

然后它又给了我一个错误

如果我从insert查询中删除(UID),我会得到这个错误


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

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

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

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

您需要准确地告诉SQLCE您要插入哪些列

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

第二个问题很简单,就是没有指定要插入的列

插入内容应如下所示:

insert into chat(field1, field2, field3) values('val1', 'val2', 'val3')
注意字段名。您必须将实际的字段名放在那里


尽管如此,代码仍然相当糟糕。尽管上述方法可行,但您确实应该参数化查询。即使假设这个程序从未真正发布到现实世界中,并且假设如果有人入侵它,你可能会不那么在意。。。以正确的方式做事仍然是一种良好的做法。哦而且您不会对
标记有任何问题。
标记。。这将导致应用程序崩溃。

您需要准确地告诉SQL CE您要插入的列

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

第二个问题很简单,就是没有指定要插入的列

插入内容应如下所示:

insert into chat(field1, field2, field3) values('val1', 'val2', 'val3')
注意字段名。您必须将实际的字段名放在那里


尽管如此,代码仍然相当糟糕。尽管上述方法可行,但您确实应该参数化查询。即使假设这个程序从未真正发布到现实世界中,并且假设如果有人入侵它,你可能会不那么在意。。。以正确的方式做事仍然是一种良好的做法。哦而且您不会对
标记有任何问题。
标记。。这将导致你的应用程序崩溃。

你的代码中有一个严重的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));

您的代码中存在严重的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));

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

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

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

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

实际上应该是
值(@val1,@val2…
),但我确信你正在编辑它。@ScottChamberlain:嗯。。你不需要打勾……)记号?我没有看到任何记号!(不要在5分钟前批评:)@ScottChamberlain:不错谢谢我没有意识到这一点。这里有点新鲜。帮了不少忙。实际上应该是
值(@val1,@val2…
),但我相信你正在编辑它。@ScottChamberlain:嗯。。你不需要打勾……)记号?我没有看到任何记号!(不要在5分钟前批评:)@ScottChamberlain:不错谢谢我没有意识到这一点。这里有点新鲜。帮助很多。您需要使用SQL参数,如果有人在聊天框中键入
,则会导致程序失败。您需要使用SQL参数,如果有人在聊天框中键入
,则会导致程序失败。