Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySQL存储进程通过.Net每隔一次调用就工作一次_C#_Mysql - Fatal编程技术网

C# MySQL存储进程通过.Net每隔一次调用就工作一次

C# MySQL存储进程通过.Net每隔一次调用就工作一次,c#,mysql,C#,Mysql,我工作的公司有一个即将推出的项目,将使用MySQL作为后端,并带有一个C#ASP.Net前端。我集成了一个测试应用程序和db,而且Ting在大多数情况下都工作得很好,除了当我尝试调用任何程序时,它会在第一次调用时工作,而不是下一次调用,然后再次调用,然后不会,毫无疑问,它只会每隔一次尝试就工作 使用workbench调用proc每次都有效,就像使用VS2010连接DB一样,只有应用程序代码失败。我一直非常明确地确保每次都打开和关闭(并处理)连接,但没有运气 下面是一个示例查询;这是我使用最多的程

我工作的公司有一个即将推出的项目,将使用MySQL作为后端,并带有一个C#ASP.Net前端。我集成了一个测试应用程序和db,而且Ting在大多数情况下都工作得很好,除了当我尝试调用任何程序时,它会在第一次调用时工作,而不是下一次调用,然后再次调用,然后不会,毫无疑问,它只会每隔一次尝试就工作

使用workbench调用proc每次都有效,就像使用VS2010连接DB一样,只有应用程序代码失败。我一直非常明确地确保每次都打开和关闭(并处理)连接,但没有运气

下面是一个示例查询;这是我使用最多的程序:

SELECT
        U.id,
        U.First_Name,
        U.Last_Name,
        U.Birth_Date,
        U.Created,
        U.Password
    FROM 
        test.user U;
正如你所看到的,这是难以置信的简单。然而,这不仅仅是这个过程。我可以按任何顺序调用任何进程并得到相同的结果;on、off、on、off等。如果我在代码中调用查询而不使用proc,它可以正常工作,但是公司使用的模型是每次调用数据库(MSSQL)都使用proc,并且他们希望将相同的标准也应用到这个应用程序中

为了更全面,这里是连接字符串(当然是修改的值):

下面是数据库管理器的顶部:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;

using MySql.Data;
using MySql.Data.MySqlClient;
我正在运行带有“使用”块的连接、命令和数据适配器,以确保它们在执行后被正确处理,没有松散的结尾,甚至为了安全起见,我还尝试过在它们关闭后简单地声明它们的处理。没有什么能改变这种行为

以前有人见过这个吗?一切都在本地运行,以防万一

下面是打电话的代码,我可能自己解决了:

公共静态数据表SPExecuteTable(string commandText=“”,List paras=null) { DataTable dt=新的DataTable(); 异常ex=null

    using (MySqlConnection conn = new MySqlConnection(MySQL_Connection))
    {
        using (MySqlCommand com = MySQlComnd(commandText, paras))
        {
            try
            {
                conn.Open();
                com.Connection = conn;

                using (MySqlDataAdapter oda = new MySqlDataAdapter())
                {
                    oda.SelectCommand = com;
                    oda.Fill(dt);

                }
            }
            catch (Exception e)
            {
                ex = e;
            }
            finally
            {
                conn.Close();
            }
        }
    }

    if (ex != null)
        throw ex;

    return dt;
}

我幸运地找到了一个解决方案:

    public static DataTable SPExecuteTable(string commandText = "", List<object> paras = null)
    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        Exception ex = null;

            using (MySqlCommand com = MySQlComnd(commandText, paras))
            {
                try
                {
                    com.Connection.Open();

                    using (MySqlDataAdapter oda = new MySqlDataAdapter())
                    {
                        oda.SelectCommand = com;
                        oda.Fill(ds);
                        dt = ds.Tables[0];
                    }
                }
                catch (Exception e)
                {
                    ex = e;
                }
                finally
                {
                    com.Connection.Close();
                    com.Connection.Dispose();
                }
            }


        if (ex != null)
            throw ex;

        return dt;
    }
公共静态数据表SPExecuteTable(string commandText=“”,List paras=null)
{
数据集ds=新数据集();
DataTable dt=新的DataTable();
异常ex=null;
使用(MySqlCommand-com=MySQlComnd(commandText,段落))
{
尝试
{
com.Connection.Open();
使用(MySqlDataAdapter=new MySqlDataAdapter())
{
oda.SelectCommand=com;
补充官方发展援助(ds);
dt=ds.表[0];
}
}
捕获(例外e)
{
ex=e;
}
最后
{
com.Connection.Close();
Dispose();
}
}
如果(ex!=null)
掷骰子;
返回dt;
}

正如您所见,如果您填充一个数据集,然后抓取第一个表,它就会工作。我假设MySQL数据适配器只填充一个表存在一些潜在的问题,但数据集似乎没有这个问题。

显示您的实际调用代码……您为我省下了很多麻烦……我不明白为什么每个人都这样做对数据库的er调用没有返回任何内容,或者给了我一个大错误,例如“过程或函数在数据库中不存在”。MySQL数据适配器在只填充表而不是填充数据集时会变得一团糟。在我的情况下,我使用的是自动生成的数据集代码,所以我不得不重载填充()方法来允许填充数据集而不是表。现在似乎可以通过工作来完成!
    public static DataTable SPExecuteTable(string commandText = "", List<object> paras = null)
    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        Exception ex = null;

            using (MySqlCommand com = MySQlComnd(commandText, paras))
            {
                try
                {
                    com.Connection.Open();

                    using (MySqlDataAdapter oda = new MySqlDataAdapter())
                    {
                        oda.SelectCommand = com;
                        oda.Fill(ds);
                        dt = ds.Tables[0];
                    }
                }
                catch (Exception e)
                {
                    ex = e;
                }
                finally
                {
                    com.Connection.Close();
                    com.Connection.Dispose();
                }
            }


        if (ex != null)
            throw ex;

        return dt;
    }