【问题标题】:SQL Command Execute Successfully but data is not inserted in WPF FormSQL 命令执行成功,但数据未插入 WPF 表单
【发布时间】:2023-03-29 03:46:01
【问题描述】:

我在以 WPF 形式插入数据时遇到问题。代码没有错误,查询运行成功但是当我检查我的数据库时没有数据。以下是代码:

 bool insert()
    {
        try
        {
            Connection.Open();
            string query = "Insert into checkouts(cnic,medicine,next_trip) VALUES('@c','@m','@n')";
            SqlCommand command = new SqlCommand(query, Connection);
            command.Parameters.AddWithValue("@c", cnic_box.Text.Replace("-",""));
            command.Parameters.AddWithValue("@m", med_box.Text);
            command.Parameters.AddWithValue("@n",Convert.ToDateTime(date_box.Text).ToString("yyyy-MM-dd"));
            command.ExecuteNonQuery();
            Connection.Close();
            return true;
        }
        catch (Exception ex)
        {
            Connection.Close();
            return false;
        }
    }

【问题讨论】:

  • 什么数据库?你那里有明确的交易吗?
  • 如何知道是否执行成功? int count=command.ExecuteNonQuery();找出插入了多少行。
  • @DheerajRoy 因为没有语法错误,当我将查询粘贴到 SQL Server 中时,它运行成功。
  • 没有语法错误不代表查询执行成功,在c#和sqlserver studio中执行方式不同。您应该使用 count 来获取插入行的计数。这会给你确认。
  • @DheerajRoy 我现在使用整数变量来检查它返回的行数,它返回 1,这意味着查询正在执行。

标签: c# sql wpf


【解决方案1】:

从查询中删除查询的VALUES部分的单引号

bool insert()
{
    try
    {
        Connection.Open();
        string query = "Insert into checkouts(cnic,medicine,next_trip) VALUES(@c, @m, @n)";
        SqlCommand command = new SqlCommand(query, Connection);
        command.Parameters.AddWithValue("@c", cnic_box.Text.Replace("-",""));
        command.Parameters.AddWithValue("@m", med_box.Text);
        command.Parameters.AddWithValue("@n",Convert.ToDateTime(date_box.Text).ToString("yyyy-MM-dd"));
        command.ExecuteNonQuery();
        Connection.Close();
        return true;
    }
    catch (Exception ex)
    {
        Connection.Close();
        return false;
    }
}

【讨论】:

    【解决方案2】:

    您的参数周围的引号可能会让您感到悲伤。试试下面的代码,看看它是否工作得更好。

    try {
        Connection.Open();
        string query = "Insert into checkouts(cnic,medicine,next_trip) VALUES(@c,@m,@n)";
        SqlCommand command = new SqlCommand(query, Connection);
        command.Parameters.AddWithValue("@c", cnic_box.Text.Replace("-",""));
        command.Parameters.AddWithValue("@m", med_box.Text);
        command.Parameters.AddWithValue("@n",Convert.ToDateTime(date_box.Text).ToString("yyyy-MM-dd"));
        Connection.Close();
        return (command.ExecuteNonQuery() > 0);
    }
    catch (Exception ex)
    {
        Connection.Close();
        return false;
    }
    

    编辑

    要显式提交数据,请尝试将您的查询替换为:

    string query = "BEGIN TRANSACTION Insert into checkouts(cnic,medicine,next_trip) VALUES(@c,@m,@n) COMMIT TRANSACTION";
    

    【讨论】:

    • @BilalAmjad 你曾经在你的代码中使用过事务吗?会不会是你已经关闭了事务,需要开一个新的才能持久化数据?
    猜你喜欢
    • 2023-01-11
    • 1970-01-01
    • 2018-02-18
    • 2023-03-03
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    相关资源
    最近更新 更多