首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入数据表或更新数据表(如果存在

插入数据表或更新数据表(如果存在
EN

Stack Overflow用户
提问于 2019-12-11 11:41:22
回答 2查看 136关注 0票数 0

我正在尝试更新一个数据表并将其插入到另一个数据表中。如果数据表中的工单( c2条码)相同,则更新数据表( c1条码),如果不同,则从数据表c1条码中插入c2条码到数据表中。我能够运行代码,对于插入部分,它正确地插入到数据库中,但对于更新部分,它不起作用。我的更新或条件中有错误吗?

代码语言:javascript
复制
connection.Open();
OleDbCommand checkrecord = new OleDbCommand("SELECT workorder FROM [c1 barcode]", connection);
OleDbCommand checkrecord2 = new OleDbCommand("SELECT workorder FROM [c2 barcode]", connection);
if (checkrecord == checkrecord2)
{
    string query = "UPDATE [c1 barcode], [c2 barcode] SET [c1 barcode].[Close from care] = [c2 barcode].[close from care], [c1 barcode].[Name care] = [c2 barcode].[name care] WHERE ([c1 barcode].Workorder=[c2 barcode].[workorder]);";
    using (OleDbCommand cmd = new OleDbCommand(query, connection))
    {
        cmd.ExecuteNonQuery();
        MessageBox.Show("updated");
    }
}
else if (checkrecord != checkrecord2)
{
    string query2 = "INSERT INTO [c1 barcode] SELECT [c2 barcode].* FROM [c2 barcode]";
    using (OleDbCommand cmd = new OleDbCommand(query2, connection))
    {
        cmd.ExecuteNonQuery();
        MessageBox.Show("inserted");
    }
}
else
{
    MessageBox.Show("error");
}
connection.Close();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-13 17:52:29

您不需要先运行检查。如果您只需运行两个SQL语句,它就会工作,如下所示:

代码语言:javascript
复制
connection.Open();
string updateQuery = "UPDATE [c1 barcode], [c2 barcode] SET [c1 barcode].[Close from care] = [c2 barcode].[close from care], [c1 barcode].[Name care] = [c2 barcode].[name care] WHERE ([c1 barcode].Workorder=[c2 barcode].[workorder]);";
string insertQuery = "INSERT INTO [c1 barcode] SELECT * FROM [c2 barcode] c2 WHERE NOT EXISTS (SELECT 1 FROM [c1 barcode] WHERE Workorder = c2.Workorder)";
using (OleDbCommand cmd = new OleDbCommand(updateQuery, connection))
{
    if ((int)cmd.ExecuteNonQuery() > 0)
    {
        MessageBox.Show("updated");
    }
}
using (OleDbCommand cmd = new OleDbCommand(insertQuery, connection))
{
    if ((int)cmd.ExecuteNonQuery() > 0)
    {
        MessageBox.Show("inserted");
    }
}
connection.Close();

这里假设Workorder是一个主键,由于您的insert语句,我认为它是正确的。

票数 0
EN

Stack Overflow用户

发布于 2019-12-11 12:11:47

checkrecord == checkrecord2是错误的,您只是在比较两个OleDbCommand对象,我猜您让两个对象执行这两个命令,然后比较这些命令的输出

如下所示:

代码语言:javascript
复制
//psuedo code
connection.Open();
OleDbCommand cmd_checkrecord = new OleDbCommand("SELECT workorder FROM [c1 barcode]", connection);
OleDbCommand cmd_checkrecord2 = new OleDbCommand("SELECT workorder FROM [c2 barcode]", connection);
var checkrecord = Convert.ToString(cmd_checkrecord.ExecuteScalar());
var checkrecord2 = Convert.ToString(cmd_checkrecord2.ExecuteScalar());

if (checkrecord == checkrecord2)
{
    string query = "UPDATE [c1 barcode], [c2 barcode] SET [c1 barcode].[Close from care] = [c2 barcode].[close from care], [c1 barcode].[Name care] = [c2 barcode].[name care] WHERE ([c1 barcode].Workorder=[c2 barcode].[workorder]);";
    using (OleDbCommand cmd = new OleDbCommand(query, connection))
    {
        cmd.ExecuteNonQuery();
        MessageBox.Show("updated");
    }
}
else if (checkrecord != checkrecord2)
{
    string query2 = "INSERT INTO [c1 barcode] SELECT [c2 barcode].* FROM [c2 barcode]";
    using (OleDbCommand cmd = new OleDbCommand(query2, connection))
    {

        cmd.ExecuteNonQuery();

        MessageBox.Show("inserted");
    }
}
else
{
    MessageBox.Show("error");
}
connection.Close();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59278600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档