以下两个C#代码示例,将信息写入Access数据库,据我所知,应该产生相同的输出。然而,第一个工作,第二个给出错误。
第一个代码:没有自动编号主键字段,效果很好。但只有在我尝试添加任何字段没有不同的行之前。我必须拥有AUTONUMBER唯一ID,(因为缺乏不公平的明显原因)
string vsql = string.Format("insert into Log values " +
"('{0}','{1}',{2},{3},'{4}',#{5}#,'{6}')",
comboBox1.Text,
comboBox2.Text,
int.Parse(textBox1.Text),
int.Parse(textBox1.Text),
textBox3.Text,
textBox2.Text,
addRemove
);
第二个代码:会返回错误消息:
“其他信息:查询值和目标字段的数量不同。”
据我所知,他们都有相同数量的字段。而且,它们都没有唯一的AUTONUMBER ID字段,我无法添加,因为我不知道如何将代码“插入”或“不插入”任何内容进入自动编号字段。再说一次,我显然需要这个领域。任何帮助都是赞赏的!两个代码都是可以接受的,只要我有一个自动更新的自动编号字段,当我的表单提交新记录时。
string vsql = string.Format("INSERT INTO Log (" +
"Location, " +
"Drug, " +
"Quantity, " +
"Strength, " +
"Initials, " +
"'Date'," +
"add_Remove" +
") VALUES (" +
comboBox1.Text,
comboBox2.Text,
int.Parse(textBox1.Text),
int.Parse(textBox1.Text),
textBox3.Text,
textBox2.Text,
addRemove);
答案 0 :(得分:2)
试试这个:在你的insert sql命令之后,执行另一个sql调用:
SELECT @@IDENTITY
返回的结果将是与刚刚添加的记录关联的自动编号字段。您的原始insert sql命令不应该尝试插入自动编号字段值。省略它。
此外,您的第二个SQL文本有问题。将其重新格式化为:
string vsql = string.Format("insert into Log (Location,Drug,Quantity,"+
"Strength,Initials,Date,add_Remove values" +
"('{0}','{1}',{2},{3},'{4}',#{5}#,'{6}')",
comboBox1.Text,
comboBox2.Text,
int.Parse(textBox1.Text),
int.Parse(textBox1.Text),
textBox3.Text,
textBox2.Text,
addRemove
);
答案 1 :(得分:2)
我不确定您是否正确使用String.Format
尝试改进此代码:
string vsql = string.Format(
"INSERT INTO Log ( Location, Drug, Quantity, Strength, Initials, [Date], add_Remove) " +
"VALUES ('{0}', '{1}', {2}, {3}, '{4}', '{5}', '{6}')",
comboBox1.Text, comboBox2.Text, int.Parse(textBox1.Text), int.Parse(textBox1.Text),
textBox3.Text, textBox2.Text, addRemove);
注意:我还没有测试过 修改:添加了一个缺失的昏迷
答案 2 :(得分:1)
我在网上搜索了一段时间,试图围绕我得到的回答。所有这些都是很好的建议。这是“奥卡姆剃刀”的一个很好的例子。我在“string vsql”行之前插入了以下内容,它就像魅力一样。
感谢所有回复!
OleDbCommand dbCommand;
OleDbDataReader dbReader;
new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;data source=C:\MyDatabase.accdb");
dbCommand = new OleDbCommand("select count(*) as Record_Count from Log", vcon);
dbReader = dbCommand.ExecuteReader();
if (dbReader.Read() == true)
rowCount = dbReader["Record_Count"].ToString();
else
return;