c# - 执行读取器 : Connection property has not been initialized error issue

标签 c# asp.net sql-server

在执行下面的代码时,我收到错误

ExecuteReader: Connection property has not been initialized.

[WebMethod]
public static bool GetCurrentToBin(string ToBin)
{
    SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SqlConn"].ToString());
    conn.Open();
    CommandFunction CF = new CommandFunction();

    SqlDataReader dr;
    dr = CF.ExecuteReader("exec sp_P_WMS_Stock_Adj_Validation_Proc '" + ToBin + "'");
    dr.Read();
    if (dr.HasRows)
    {
        conn.Close();
        return true;
    }
    return false;
}

最佳答案

您可以像下面这样重构您的代码,我认为您会得到您想要的。问题是您没有在 CommandFunction 对象的任何位置指定将使用的 sql 连接。我不知道这个对象,但我认为这就是问题所在。下面的解决方案使用 SqlCommand 类。

using System.Configuration;

[WebMethod]
public static string GetCurrentToBin(string ToBin)
{
    var connectionString = ConfigurationManager.ConnectionStrings["SqlConn"].ToString();
    using(var conn = new SqlConnection(connectionString))
    {
        const string queryString = "exec sp_P_WMS_Stock_Adj_Validation_Proc @Bin";

        var sqlCommand = new SqlCommand(queryString , conn);
        sqlCommand.Parameters.AddWithValue("@Bin",ToBin);

        conn.Open();
        var reader = sqlCommand.ExecuteReader();

        if(reader.Read() && !reader.IsDBNull(0))
        {
            return reader.GetString(0);
        }
        return null;
    }
}

从上面的代码中你可以得到两件事:

  • 我们没有显式关闭 sql 连接。我们没有显式关闭连接,而是让 using 语句为我们执行此操作。因此,每当您想要创建新的 sql 连接时,将其包装在 using 语句中,您将不需要再次记住关闭连接。
  • 仅使用参数化查询。如果不这样做,您将让您的应用程序打开到 sql injections .

关于c# - 执行读取器 : Connection property has not been initialized error issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41777033/

相关文章:

c# - 在单个二进制文件中定位多个 .NET 框架?

ASP.net:网站或 Web 应用程序项目

c# - __EVENTTARGET 在按钮点击回发时为空

sql - 哪种 Sql Server 列类型用于视频中的位置?

sql-server - t-sql 中的 IsNumeric 有问题吗?

sql-server - 从经典 ASP 连接时 SQL Server 中的应用程序名称

c# for 循环在 switch/case 情况下 - 如何?

c# - Encog 在具有多个处理器的多插槽主板上是否具有良好的性能?

c# - 如何在 Windows 8.1 应用程序 xaml 中的 MenuFlyoutItem 内添加 StackPanel

c# - 数据表还是 IList?哪个更好?