【问题标题】:"sqlexception could not find stored procedure" - C# Execute Store Procedure in SqlServer without parameters“sqlexception 找不到存储过程” - C# 在没有参数的 SqlServer 中执行存储过程
【发布时间】:2015-06-29 08:02:22
【问题描述】:

现在我有这个方法来执行存储过程:

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 找不到存储过程”)。 我在网络配置中测试了连接字符串,它也可以正常工作。

IDataReader 调用失败。

谁能帮我解决这个问题?

附言- 我正在尝试创建一个执行存储过程的方法,而不给它任何参数并将其作为 DataTable 检索。

【问题讨论】:

  • “我得到的错误是它找不到我的存储过程” 发布 EXACT 异常,即复制粘贴其文本。另外,请修正您问题的标题,以反映您遇到的实际问题。
  • 完成。请告诉我这是否更合适? @BCdotWEB
  • 存储过程名称是否有错字?您实际上是否连接到正确的数据库?您是否在限定存储过程所有者(即 dbo..)很难看出问题所在,但线索在异常中 - SQL Server 找不到您要的内容。
  • 存储过程名称是正确的 - 我在 sql server 中测试了它(使用确切的字符串)。我正在连接到正确的数据库。

标签: c# sql-server stored-procedures


【解决方案1】:

更新

我设法解决了这个问题。 问题出在SqlDatabase sqlDB; 它保存了一个旧的连接字符串,我只需要将构造函数更新为如下所示:

 public static SqlDatabase SqlDB(string connectionString)
    {
        if (sqlDB == null || sqlDB.ConnectionString != connectionString)
        {
            sqlDB = CreateConnection(connectionString);
        }
        return sqlDB;
    }

它就像一个魅力。 感谢任何帮助过我的人。

【讨论】:

    猜你喜欢
    • 2016-09-04
    • 2010-09-15
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    相关资源
    最近更新 更多