我从未见过的MySQL连接错误

2023-12-04

新的mysql错误:

ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-5.5.9]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'System.Data.Odbc.OdbcCommand' at line 1 

我以前从未见过这个错误,不知道它与什么有关?

    using (OdbcConnection connection = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=fakepass;"))
    {
        // ODBC command and transaction objects
        OdbcCommand command = new OdbcCommand();
        OdbcTransaction transaction = null;

        // tell the command to use our connection
        command.Connection = connection;

        try
        {
            // open the connection
            connection.Open();

            // start the transaction
            transaction = connection.BeginTransaction();

            // Assign transaction object for a pending local transaction.
            command.Connection = connection;
            command.Transaction = transaction;

            // TODO: Build a SQL INSERT statement
            OdbcCommand cmd = new OdbcCommand("INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme, username, password) VALUES ('" + TextBox1.Text + "', '" + TextBox2.Text + "', '" + TextBox3.Text + "', '" + TextBox4.Text + "', '" + TextBox5.Text + "', '" + TextBox6.Text + "', '" + TextBox7.Text + "', '" + TextBox8.Text + "')", connection);

            // run the insert using a non query call
            command.CommandText = cmd.ToString();
            command.ExecuteNonQuery();

            /* now we want to make a second call to MYSQL to get the new index 
               value it created for the primary key.  This is called using scalar so it will
                return the value of the SQL  statement.  We convert that to an int for later use.*/
            command.CommandText = "select last_insert_id();";
            int id = Convert.ToInt32(command.ExecuteScalar());
            Label10.Text = Convert.ToString(id);
            // the name id doesnt not exist in the current context

            // Commit the transaction.
            transaction.Commit();
        }
        catch (Exception ex)
        {
            Label10.Text = ": " + ex.Message;

            try
            {
                // Attempt to roll back the transaction.
                transaction.Rollback();
            }
            catch
            {
                // Do nothing here; transaction is not active.
            }
        }
    }

EDIT:

    using (var conn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=fakepass;"))
    {
        conn.Open();
        using (var tx = conn.BeginTransaction())
        {
            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme, username, password) VALUES (@Email, @FirstName, @SecondName, @DOB, @Location, @Aboutme, @username, @password)";
                cmd.Parameters.AddWithValue("@Email", TextBox1.Text);
                cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text);
                cmd.Parameters.AddWithValue("@SecondName", TextBox3.Text);

                // TODO: might require a parsing if the column is of type date in SQL
                cmd.Parameters.AddWithValue("@DOB", TextBox4.Text);

                cmd.Parameters.AddWithValue("@Location", TextBox5.Text);
                cmd.Parameters.AddWithValue("@Aboutme", TextBox6.Text);
                cmd.Parameters.AddWithValue("@username", TextBox7.Text);
                cmd.Parameters.AddWithValue("@password", TextBox8.Text);
                cmd.ExecuteNonQuery();
//error on this line
            }

            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "select last_insert_id();";
                int id = Convert.ToInt32(cmd.ExecuteScalar());
                Label10.Text = Convert.ToString(id);
            }

            tx.Commit();
        }
    }

{“当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery 要求该命令具有事务。该命令的 Transaction 属性尚未初始化。”}


当有一个数据库时,为什么你仍然使用有问题的 ODBC 连接到 MySqlADO.NET 连接器?另外,在形成查询时,这个可怕的字符串连接是什么?:

OdbcCommand cmd = new OdbcCommand("INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme, username, password) VALUES ('" + TextBox1.Text + "', '" + TextBox2.Text + "', '" + TextBox3.Text + "', '" + TextBox4.Text + "', '" + TextBox5.Text + "', '" + TextBox6.Text + "', '" + TextBox7.Text + "', '" + TextBox8.Text + "')", connection);

你没听说过吗SQL注入 and 参数化查询哪些可以避免它?

我只能说,如果你使用+在编写 SQL 查询时,这就像拿着一把枪朝你的脚开枪(或者根据情况向你的头开枪,但在所有情况下你都是在向自己开枪,基本上是一种自杀行为)。

所以,这是做事的正确方法:

using (var conn = new MySqlConnection("Server=localhost; Database=gymwebsite2; User=root; Password=commando;"))
{
    conn.Open();
    using (var tx = conn.BeginTransaction())
    {
        using (var cmd = conn.CreateCommand())
        {
            cmd.CommandText = "INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme, username, password) VALUES (@Email, @FirstName, @SecondName, @DOB, @Location, @Aboutme, @username, @password)";
            cmd.Parameters.AddWithValue("@Email", TextBox1.Text);
            cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text);
            cmd.Parameters.AddWithValue("@SecondName", TextBox3.Text);

            // TODO: might require a parsing if the column is of type date in SQL
            cmd.Parameters.AddWithValue("@DOB", TextBox4.Text);

            cmd.Parameters.AddWithValue("@Location", TextBox5.Text);
            cmd.Parameters.AddWithValue("@Aboutme", TextBox6.Text);
            cmd.Parameters.AddWithValue("@username", TextBox7.Text);
            cmd.Parameters.AddWithValue("@password", TextBox8.Text);
            cmd.ExecuteNonQuery();
        }

        using (var cmd = conn.CreateCommand())
        {
            cmd.CommandText = "select last_insert_id();";
            int id = Convert.ToInt32(cmd.ExecuteScalar());
            Label10.Text = Convert.ToString(id);
        }

        tx.Commit();
    }
}

另请适当命名这些文本框。维护这段代码的可怜人可能会发出绝望的尖叫。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我从未见过的MySQL连接错误 的相关文章

  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 回发或回调参数无效。使用“”启用事件验证

    当我从客户端回发页面时 出现以下错误 我有修改客户端 asp ListBox 的 JavaScript 代码 我们该如何解决这个问题 错误详细信息如下 Server Error in XXX Application Invalid post
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 如何防止 ASP.NET 站点的图像盗链?

    防止人们从我的托管 ASP NET 网站热链接到图像的最佳 最简单方法是什么 我不需要防止所有图像 资源被热链接 我只是想防止热链接到网站上的特定图像 资源 供参考 它托管在 GoDaddy com 上 因此 IIS 技巧可能不起作用 最简
  • 如何从代码隐藏文件中的asp.net用户控件注册(调用)jQuery函数?

    如何从代码隐藏文件中的asp net用户控件注册 调用 jQuery函数 您可以使用ClientScriptManager RegisterStartupScript http msdn microsoft com en us librar
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • $_SESSION 中保存大量信息可以吗?

    我需要存储许多数组 SESSION以防止从 MySQL 检索信息 可以吗 其中 太多 的信息有多少 SESSION还是没有 太多 谢谢 附 或者更好地使用http php net manual en book memcache php ht
  • 如果方法参数是 string 或 int,ASP.NET WebAPI 会抛出 404

    我对 ASP NET MVC4 WebAPI 做了一个非常简单的测试 发现了一些有趣的问题 当一个方法采用复杂类型时 它会起作用 但是当它采用 string 或 int 时 它将抛出 404 如给出的屏幕截图所示 AddProduct 可以
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • PHP 中的嵌套 JSON 输出

    我正在为 iOS 应用程序构建 API 并尝试将 mySQL 数据转换为 JSON 字符串进行处理 所需的输出将需要顶级订单详细信息 例如客户名称和地址 然后是订购的产品子数组 我需要的两个表中有相当多的字段 我希望拥有所有字段 我已经构建
  • 更新查询时 ios 中出现“数据库锁定”错误

    我正在使用下面的代码更新查询 using sqlite 但我越来越 database is locked error 我尝试搜索一些 SO 链接 建议关闭数据库 但我再次执行此操作时遇到相同的错误 我已经提到过代码中出现错误的地方 cons
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个

随机推荐

  • Android:如何触发软键盘上的任意按键事件?

    有没有办法以编程方式按下 Android 软键盘的按键 就像 当键盘出现时 我想通过我的代码而不是手指按 J 键 第一种方法 IBinder binder ServiceManager getService window IWindowMa
  • fgets 被跳过

    我有一个小程序 我想询问一个选项 然后询问一个文件名 Some code before printf n printf 1 Register a file n printf 2 Get global list n printf 3 Down
  • Java - 无法解析的日期,需要格式匹配“GMT-0400”

    我有以下Java DateFormat formatter new SimpleDateFormat EEE MMM dd yyyy HH mm ss zZ zzzz Locale ENGLISH Calendar cal Calendar
  • Java 加载自定义字体文件 (.ttf)

    我在下面使用了这段代码 它出现了这个堆栈跟踪 java io FileNotFoundException font ttf No such file or directory at java io FileInputStream open
  • Python ctypes:在 c 中调用具有自定义类型的函数

    我正在尝试包裹预先存在的c代码用于 Linux 中的 Python 我对 c 的经验很少 目前我正在使用 ctypes 来解决这个问题 我的 C 函数需要一个带有自定义类型条目的二维数组 我不知道如何在 python 中重新创建它以将其传递
  • 错误“Gradle 同步失败:连接被拒绝:连接”

    所以我过了很长一段时间才再次安装Android Studio 它要求我配置代理 所以我就这么做了 我测试了连接并且成功了 然后它要求我配置 Gradle 的代理设置 我使用了相同的配置 现在 在加载最新的 Vuforia Sample 项目
  • 具有空初始化的对象的生命周期

    当前的标准草案说 以前的标准有类似的措辞 基本生活 1 对象或引用的生命周期是其运行时属性 对象或参考 一个物体被称为非空的 初始化 如果它是类或聚合类型 并且它或其中之一 它的子对象是由一个构造函数而不是一个简单的构造函数初始化的 默认构
  • 如何创建没有任何中间文件的 Hive 表?

    我想创建并填充配置单元表而不从磁盘加载任何内容 具体来说 我有 set idlist 1 2 3 set values 2 3 5 我想创建一个包含 9 行的表 id value 1 2 1 3 1 5 2 2 2 3 2 5 3 2 3
  • main函数可以重载吗?

    两个有效版本main 存在于C int main version 1 int main int argc char argv version 2 但两种过载不能同时共存 为什么不 潜在用例 从终端运行程序时 如果没有传递参数 则调用第一个版
  • Google Analytics 和 __utm.gif 文件

    当使用 Google Analytics 并使用较新的 ga js 文件时 您网站的根目录中是否需要 utm gif 文件 我确实看到我的浏览器对 google analytics com 上的文件进行了调用 http www google
  • 为什么在哈希映射中查找项目比在数组中查找项目更快?

    您可能在某个地方提到过在 hashmap dictionary table 中查找元素比在 list array 中查找元素更快 我的问题是为什么 到目前为止我做出的推论 为什么它应该更快 据我所知 在这两种数据结构中 它必须遍历直到到达所
  • 多个模板匹配仅检测到一个匹配项

    我正在尝试匹配这张图片 在这张图片中 然而 我找不到超过一个的头目敌人 我需要做什么才能找到其他人 图片加载 struct XYposition float X float Y std vector
  • 如何使用 jQuery 获取 HTTP 状态代码?

    我想检查页面是否返回状态代码401 这可能吗 这是我的尝试 但它只返回 0 ajax url http my ip test test php data complete function xhr statusText alert xhr
  • 在 PHP 中,可以在同一行实例化一个对象并调用一个方法吗?

    我想做的是这样的 method result new Obj gt method 而不必这样做 obj new Obj method result obj gt method 在我的具体情况下 结果实际上对我来说并不重要 但是 有办法做到这
  • 计算属于某个类别及其子类别的所有帖子

    我非常感谢对我的问题的帮助 我有 2 个 MySQL 表 类别和帖子 布局 简化 如下 类别 CATID 名称 Parent id posts PID 名称 类别 我想做的是获取每个类别的帖子总数 包括子类别中的所有帖子 现在 我通过执行以
  • 如何在 iOS 中的小键盘上添加“完成”按钮

    因此 小键盘默认情况下没有 完成 或 下一步 按钮 因此我想添加一个 在 iOS 6 及更低版本中 有一些向键盘添加按钮的技巧 但它们似乎在 iOS 7 中不起作用 首先我订阅显示通知的键盘 NSNotificationCenter def
  • Selenium 不会刷新 Jenkins 上的页面

    我有一个测试用例是这样的 打开主页 如果没有内容 刷新页面 继续其他步骤 这是代码的相关部分 public JpoPO driver get Settings JPO TEST URL PageFactory initElements dr
  • 信息窗口的替代品

    谷歌地图信息窗口的缺点之一是地图会移动 为信息窗口的显示腾出空间 冒泡 http econym org uk gmap ebuble html 克服了这个限制 它不会移动地图 然而 它有其自身的局限性 由于它的工作方式 您不能像信息窗口一样
  • CDI ConversationScoped 长时间运行的 Bean 不工作

    我在理解 Weld 或 CDI 的对话范围时遇到一些问题 在我的 JSF Faclets 页面中 我调用
  • 我从未见过的MySQL连接错误

    新的mysql错误 ERROR 42000 MySQL ODBC 3 51 Driver mysqld 5 5 9 You have an error in your SQL syntax check the manual that cor