我工作的公司有一个即将推出的项目,它将使用MySQL作为C#ASP .Net前端的后端。我把一个测试应用程序和db组合在一起,并且tings似乎在大多数情况下工作得非常漂亮,除非我尝试调用任何proc,它将在第一次调用时工作,而不是在下一次调用,然后再次调用,然后不会,不会失败,它只会在其他尝试中起作用。
使用workbench每次都调用proc工作,就像使用VS2010连接数据库一样,只有应用程序代码失败。我一直非常明确地确保每次都打开和关闭(并处理)连接,但没有运气。
这是一个示例查询;这是我最常用的过程:
SELECT
U.id,
U.First_Name,
U.Last_Name,
U.Birth_Date,
U.Created,
U.Password
FROM
test.user U;
正如您所看到的,它非常简单。然而,不只是那个过程。我可以按任何顺序调用任何触发器并获得相同的结果;如果我在不使用proc的代码中调用查询,它可以正常工作,但是公司使用的模型是每次调用数据库(MSSQL)时都会触发它们并且它们想要携带与此应用程序相同的标准。
为了彻底,这里是连接字符串(当然修改了值):
Server=127.0.0.1;Port=3306;Data Source=localhost;Database=testdb;User Id=test_user;Password=pword;
以下是数据库管理员的顶部:
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;
我正在使用“使用”块来运行连接,命令和数据适配器,以确保它们在执行后正确处理,没有松散的末端,并且甚至尝试在它们关闭后专门声明它们的处理只是为了安全。没有什么能改变这种行为。
有没有人见过这个?如果重要的话,一切都在本地运行。
以下是拨打电话的代码,我可能已经自己解决了这个问题:
public static DataTable SPExecuteTable(string commandText =“”,List paras = null) { DataTable dt = new 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;
}
答案 0 :(得分:1)
我有点愚蠢到解决方案:
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;
}
正如您所看到的,如果您填充DataSet然后只抓住第一个表,它就可以工作。我假设MySQL数据适配器只填充一个表存在一些潜在的问题,但DataSet似乎没有分享这个问题。