现在我有这个方法来执行存储过程:
public static DataTable ExecuteProcedureNoParams(string connectionStringName, string procedureName)
{
using (DbCommand sprocCmd = SqlDB(connectionStringName).GetStoredProcCommand(procedureName))
{
DataTable dt = new DataTable();
using (IDataReader sprocReader = SqlDB(connectionStringName).ExecuteReader(sprocCmd))
{
dt.Load(sprocReader);
// DisplayRowValues(sprocReader);
}
return dt;
}
}
private static SqlDatabase sqlDB;
public static SqlDatabase SqlDB(string connectionString)
{
if (sqlDB == null)
{
sqlDB = CreateConnection(connectionString);
}
return sqlDB;
}
private static SqlDatabase CreateConnection(string connectionString)
{
DatabaseProviderFactory factory = new DatabaseProviderFactory();
if (string.IsNullOrWhiteSpace(connectionString))
{
// Create the default Database object from the factory.
// The actual concrete type is determined by the configuration settings.
return factory.CreateDefault() as SqlDatabase;
}
else
{
// Create a Database object from the factory using the connection string name.
return factory.Create(connectionString) as SqlDatabase;
}
}
现在,我得到的错误是找不到我的商店程序(" sqlexception无法找到存储过程")。 我测试了Web配置中的连接字符串,它也正常工作。
在IDataReader调用中失败。
可以请任何人帮我解决这个问题吗?
P.S。 - 我试图创建一个执行存储过程的方法,而不给它任何参数并将其作为DataTable检索。
答案 0 :(得分:1)
<强>更新强>
我设法解决了这个问题。
问题出在SqlDatabase sqlDB;
它保存了一个旧的连接字符串,我只需要更新构造函数,如下所示:
public static SqlDatabase SqlDB(string connectionString)
{
if (sqlDB == null || sqlDB.ConnectionString != connectionString)
{
sqlDB = CreateConnection(connectionString);
}
return sqlDB;
}
它就像一个魅力。 感谢任何帮助过我的人。