MySql.Data ExecuteNonQuery 抛出 NullReferenceException

问题描述 投票:0回答:1

我在我的项目中安装了 MySql.Data NuGet 包 并尝试使用 ExecuteNonQuery 创建表。

    using (MySqlConnection con = new MySqlConnection(connectionString))
    {
        con.Open();
        MySqlCommand sqlCommand = new MySqlCommand();
        sqlCommand.Connection = con;
        string cmd = @"CREATE TABLE [TABLENAME] (
                    TIMESTAMP VARCHAR(30) NOT NULL,
                    TAGNAME NVARCHAR(250) NOT NULL,
                    MESSAGE NVARCHAR(1000) NOT NULL,
                    LIMITTYPE NVARCHAR(100) NOT NULL,
                    CLASSNAME NVARCHAR(100) NOT NULL,
                    STATE NVARCHAR(20) NOT NULL,
                    PRIMARY KEY (TIMESTAMP, TAGNAME),
                    KEY IDX_[TABLENAME] (TIMESTAMP, TAGNAME)
                    ) ENGINE=InnoDB DEFAULT CHARSET=utf8";
        sqlCommand.CommandText = cmd.Replace("[TABLENAME]", tableName);
        sqlCommand.ExecuteNonQuery();
    }

你可以看到上面的代码。 但是,当我执行该命令时,它会从

sqlCommand.ExecuteNonQuery();
抛出 NullReferenceException。

而且,当我进入 MySql 工作台时,我可以发现该表已创建,但也有一行包含所有空值,这是不允许的。 像这样:

workbench

为什么会发生这种情况,我该如何阻止它?

我从工作台本身执行查询,并且没有插入行。 我只想创建一个表而不插入一行。

编辑

   at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
   at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)
   at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
   at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
   at MySql.Data.MySqlClient.MySqlDataReader.Close()
   at MySql.Data.MySqlClient.MySqlDataReader.Dispose(Boolean disposing)
   at MySql.Data.MySqlClient.MySqlDataReader.Dispose()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()

这是堆栈跟踪。

c# mysql-workbench
1个回答
0
投票

好的...我找到了解决方法。

我认为的原因是

NVARCHAR
并且
ENGINE=InnoDB DEFAULT CHARSET=utf8
部分。

我将

NVARCHAR
替换为
VARCHAR
并删除了
ENGINE=InnoDB DEFAULT CHARSET=utf8

现在它不会抛出

NullReferenceException
。我认为这是因为MySQL版本的差异。 我之前用的是5.7,升级到8.0了。

不知道确切原因,但希望这个答案可以帮助像我这样的人。 感谢所有评论的人。

© www.soinside.com 2019 - 2024. All rights reserved.