“INSERT语句的选择列表包含的项目少于 插入列表。 SELECT值的数量必须与数量匹配 INSERT列。“
我有一个问题,这是对的吗?我的代码的构造?
private void btnCheckOut_Click(object sender, EventArgs e)
{
DialogResult res = MessageBox.Show("Are you done adding your items?","Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (res == DialogResult.Yes)
{
Conn = k.getConn();
Conn.Open();
str = "INSERT INTO Items (itemCode, itemBrand, itemColor , qty) SELECT itemCode, itemBrand, itemColor FROM Purchase";
cmd = new SqlCommand(str, Conn);
cmd.ExecuteNonQuery();
dr = cmd.ExecuteReader();
cmd.Dispose();
Conn.Close();
MessageBox.Show("Successfully Added to your CART" ,"Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (res == DialogResult.No)
{
}
}`
我想在名为Items
的数据库中传输它答案 0 :(得分:1)
在insert
的查询中有4列
INSERT INTO Items (itemCode, itemBrand, itemColor , qty)
select
中的只有3列
SELECT itemCode, itemBrand, itemColor FROM Purchase
应该如下
INSERT INTO Items (itemCode, itemBrand, itemColor , qty)
SELECT itemCode, itemBrand, itemColor,qty FROM Purchase
答案 1 :(得分:0)
在下面的查询中:
str = "INSERT INTO Items (itemCode, itemBrand, itemColor , qty) SELECT itemCode, itemBrand, itemColor FROM Purchase";
cmd = new SqlCommand(str, Conn);
您必须在select查询中准确传递四个列名,以便clumn列表与insert查询的列列表匹配。如果您不想获取数量列的数据,请将其从INSERT查询中删除。
您还可以为数据库中的数量列设置默认值,以确保它获得默认的整数值而不是NULL。
其次,在ExecuteNonQuery()之后不需要使用以下语句:
dr = cmd.ExecuteReader();
因为你没有对可能与博士相关的数据做任何事情 相反,如果您尝试获取插入查询所影响的行数,则可以使用以下代码:
int cnt = cmd.ExecuteNonQuery();
然后根据需要显示此变量的值,可以在标签中。
希望这会有所帮助。