首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LINQ和mysqlconnection遇到致命错误

使用LINQ和mysqlconnection遇到致命错误
EN

Stack Overflow用户
提问于 2015-07-08 10:49:48
回答 1查看 160关注 0票数 0

我对c#非常陌生,所以请任何帮助都会很好。我做了一个简单的控制台代码来更新mysql数据库,请放心,我的数据库已经完成了设置,App.config完成了。现在,问题是当我运行来测试我的代码时,发生了这个错误。“命令执行过程中遇到的致命错误”

下面是我的代码:

类库:

代码语言:javascript
复制
public class DBEntity
{
        private MySqlConnection DBConnection { get;  set; }
        public string INSERT = "insert";
        public string SELECT = "select";
        public string UPDATE = "update";

        public void Get_Connection(string ConnectionString)
        {
            DBConnection = new MySqlConnection(ConnectionString);
        }

        public void Close_Connection()
        {
            DBConnection.Close();
        }

        public void Query(string operation, string query, params object[] values)
        {
            try
            {
                DBConnection.Open();
                switch (operation)
                {
                    case "update":
                        try
                        {
                            using (MySqlCommand cmd = new MySqlCommand(query, DBConnection))
                            {
                                IEnumerable<string> tokens = query.Split(new char[] { ' ', '\'', ';', ',' }).Where(str => str.Contains('@'));
                                var zipTwoTokens = tokens.Zip(values, (token, vals) => cmd.Parameters.AddWithValue(token, vals)).ToList();

                                cmd.ExecuteNonQuery();
                                DBConnection.Close();
                            }
                        }
                        catch (MySqlException e)
                        {
                            DBConnection.Close();
                            Console.WriteLine(e.Message);
                        }
                        break;
                    default:
                        break;
                }
            }
            catch (MySqlException)
            {

            }
       }
}

主修班:

代码语言:javascript
复制
class Program
{
    static void Main(string[] args)
    {
        DBEntity database = new DBEntity();
        database.Get_Connection(ConfigurationManager.ConnectionStrings["MySQLConnection"].ConnectionString);
        database.Query(database.UPDATE, "UPDATE RoyDB.Products SET Products.Name = @productName WHERE Products.ProductID = @product;", "Kayak", 1);
        Console.Read();
    }
}

现在,问题是当我运行来测试我的代码时,发生了这个错误。“命令执行过程中遇到的致命错误”

有谁可以帮我?我似乎不明白错误的原因。

任何帮助都会很好!谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-08 10:53:45

将查询拆分以确定参数的方式并不完全正确。在本例中,它包含分号,因此您可以获得名为@productName@product;的参数。在拆分字符串中添加分号,如下所示:

代码语言:javascript
复制
IEnumerable<string> tokens = 
    query.Split(new char[] { ' ', '\'', ';'}).Where(str => str.Contains('@'));

此外,还需要强制调用Zip方法,因为Linq使用延迟执行。要做到这一点,在zip的末尾添加ToList

代码语言:javascript
复制
var zipTwoTokens = 
    parameterToken.Zip(values, (prmtoken, vals) => 
        cmd.Parameters.AddWithValue(prmtoken, vals)).ToList();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31290471

复制
相关文章

相似问题

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