我试图在数据库中的表(RamResults)中插入一个int值,db结构如下:
表格列:
ID(主键)
结果(int类型)
在C#中,我尝试在Results列中插入一个值:
// Retrieve the connection string from the settings file.
string conString = Properties.Settings.Default.MyDBConnectionString;
// Open the connection using the connection string.
using (SqlCeConnection con = new SqlCeConnection(conString))
{
con.Open();
// Insert into the SqlCe table. ExecuteNonQuery is best for inserts.
int num = 5;
using (SqlCeCommand com = new SqlCeCommand(
"INSERT INTO RamResults VALUES(@num)", con))
{
com.Parameters.AddWithValue("@num", num);
com.ExecuteNonQuery();
}
}
但是我收到以下错误:
查询和表中的列数必须匹配。 [数量 query = 1中的列数,表中的列数= 2]
我的印象是主键(ID)不需要插入任何数据,因为它会自动在该列中分配一个ID号?
修改
假设我需要自动增加PK,我在VS 2010中编辑表模式时看不到如何执行此操作:
答案 0 :(得分:2)
作为主键的ID
不会自动插入值,除非您将其设置为AutoIncrement。
<强>更新强>
根据架构,ID
的数据类型为 UniqueIdentifier ,请尝试将其更改为整数或 Int ,您可以将Is Identity
设置为 True
答案 1 :(得分:1)
这是完全正确的。你的消息告诉你pk没有自动生成。
查找Identity columns。创建一个自动或提供值。
答案 2 :(得分:1)
在您的情况下该ID的标识不是IDENTITY 自动递增值,您应该明确指定其值
INSERT INTO RamResults(Id, Results) VALUES(@Id, @num)
当然,你应该手动提供@id参数的值
或强>
应将DEFAULT
放置在您的案例中的Id列 - 或NEWID()
或NEWSEQUENTIALID()
在这种情况下,您的查询应如下所示:
INSERT INTO RamResults(Id, Results) VALUES(DEFAULT, @num)
没有DEFAULT
约束的OR :
INSERT INTO RamResults(Id, Results) VALUES(NEWID(), @num)
答案 3 :(得分:1)
在INSERT查询中指定列
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
答案 4 :(得分:1)
在表设计器中将ID列设置为“Identity”。这样做会自动插入增量ID。
答案 5 :(得分:0)
您只需在identity
时插入primekey(Id)列值。它不是默认的。
答案 6 :(得分:0)
也许,如果你明确指定列?
INSERT INTO RamResults
(Results)
VALUES (@num)
答案 7 :(得分:0)
Do not specify the column Id if it is primary key and Identity is true, then it will work fine
private void btn_submit_Click(object sender, EventArgs e)
{
con.Open();
SqlCeCommand com = new SqlCeCommand("insert into Result(Name,RollNo,Age,Trade,Marks) values(@name,@rollno,@age,@trade,@marks)", con);
com.CommandType = CommandType.Text;
com.Parameters.AddWithValue("@name", name_txt.Text);
com.Parameters.AddWithValue("@rollno", roll_txt.Text);
com.Parameters.AddWithValue("@age", age_txt.Text);
com.Parameters.AddWithValue("@trade", trade_txt.Text);
com.Parameters.AddWithValue("@marks", marks_txt.Text);
com.ExecuteNonQuery();
MessageBox.Show("Submitted");
}
答案 8 :(得分:0)
query = 1中的列数,表中的列数= 2如果您想将结果参数传递给查询,则必须自动增加DB中的Id字段并将ID的类型更改为int
<强>建议强> 我建议您使用实体框架和使用存储过程来查询数据库,而不是在使用存储过程时在C#中键入代码,这样可以增强应用程序的安全性和代码的重用能力。您还可以选择使用简单的Linq查询来访问数据库,并调用简单的add方法来添加。