【问题标题】:Getting DB error: data type mismatch in criteria expression c#获取 DB 错误:条件表达式 C# 中的数据类型不匹配
【发布时间】:2011-08-02 17:19:44
【问题描述】:

对 c# 和 db 编程非常陌生。我已经接管了别人的代码。尝试更新数据库时出现错误。代码如下:

   private void EnableEvent(int eventID)
    {


        OleDbCommand oleCMD = new OleDbCommand();
        oleCMD.Connection = Database.SqlConn();
        OleDbTransaction oleTrans = oleCMD.Connection.BeginTransaction();
        oleCMD.Transaction = oleTrans;

        try
        {
            StringBuilder sql = new StringBuilder();
            sql.AppendFormat("UPDATE Events SET isActive = 1 where EventID='{0}'", eventID);

            oleCMD.CommandText = sql.ToString();
            // insert the header
            oleCMD.ExecuteNonQuery();
            oleTrans.Commit();
        }
        catch(Exception e)
        {
            MessageBox.Show(e.Message, "Database Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
        }
        finally
        {
            oleCMD.Connection.Close();
            oleCMD.Dispose();
        }
    }

【问题讨论】:

  • 你能发布完整的错误字符串吗?
  • 如何获取更多的错误字符串? e.message 是“条件表达式中的数据类型不匹配”

标签: c# mysql visual-studio-2010


【解决方案1】:

试试这个!

private void EnableEvent(int eventID)
{
    OleDbConnection myConn = new OleDbConnection(myConnString);
    myConn.Open();

    OleDbCommand myCommand = myConn.CreateCommand();
    OleDbTransaction myTrans;
    // Start a local transaction
    myTrans = myConn.BeginTransaction();
   // Assign transaction object for a pending local transaction
    myCommand.Connection = myConn;
    myCommand.Transaction = myTrans;

    try
    {
        StringBuilder sql = new StringBuilder();
        sql.AppendFormat("UPDATE Events SET isActive = 1 where EventID='{0}'", eventID);

        myCommand.CommandText = sql.ToString();
        // insert the header
        myCommand.ExecuteNonQuery();
        myTrans.Commit();
    }
    catch(Exception e)
    {
        MessageBox.Show(e.Message, "Database Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
    }
    finally
    {
        myCommand.Connection.Close();
        myCommand.Dispose();
    }
}

如果这有帮助,请告诉我!

【讨论】:

    【解决方案2】:

    编辑:

    Gotcha now ... 像下面这样格式化您的查询,它肯定会工作

            StringBuilder sql = new StringBuilder();
            sql.AppendFormat("UPDATE Events SET isActive = 1 where EventID = {0}", eventID);
    

    对于Numeric 字段,您不应在值周围加上撇号。这就是问题所在。

    【讨论】:

    • eventID 是一个整数...我仔细检查了。
    • 您是否尝试过我在回答中提出的查询格式...只需引用set isActive = '1' 并尝试一次。应该可以正常工作。
    • 我做到了。没运气。我会在我的 MySQL Workbench 中使用什么命令来手动尝试它?我知道如何从数据库运行 SELECT 查询。但是如何运行更新?这样我就可以看到数据库是否会接受更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多