簡體   English   中英

為什么我收到此錯誤:ConnectionString屬性尚未初始化

[英]Why am I getting this error: The ConnectionString property has not been initialized

我已經搜索並嘗試了所有的東西,但無法想出這個。 我想做一些簡單的事情,但好像我做錯了什么。 基本上,任何已存款的用戶,我想返回true,如果他們沒有,我想返回false。 我想這應該很容易,但我對此感到難過。

這是錯誤:

ConnectionString屬性尚未初始化。

描述:執行當前Web請求期間發生未處理的異常。 請查看堆棧跟蹤以獲取有關錯誤及其源自代碼的位置的更多信息。

異常詳細信息:System.InvalidOperationException:尚未初始化ConnectionString屬性。

來源錯誤:

Line 59:         Cmd.Parameters.AddWithValue("@UserID", userId);
Line 60:         con.Open();
Line 61: 
Line 62:         result = (int)Cmd.ExecuteScalar();

這是堆棧跟蹤的頂部:

[InvalidOperationException:ConnectionString屬性尚未初始化。] System.Data.SqlClient.SqlConnection.PermissionDemand()+ 4879939 System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)+20 System.Data.ProviderBase.DbConnectionClosed.OpenConnection( DbConnection outerConnection,DbConnectionFactory connectionFactory)+117 System.Data.SqlClient.SqlConnection.Open()+122

這是我返回true或false的方法:

public static bool HasDeposit(int userId)
{
    int result = 0;
    //since executeScalar is intended to retreive only a single value
    //from a query, we select the number of results instead of the email address
    //of each matching result.
    string queryTransaction = "SELECT COUNT(UserID) FROM Transaction WHERE TransactionTypeID = 6 AND UserID = @UserID";
    string constr = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
    SqlConnection con = new SqlConnection(constr);

    SqlCommand Cmd = new SqlCommand(queryTransaction, con);

    Cmd.Parameters.AddWithValue("@UserID", userId);
    con.Open();

    result = (int)Cmd.ExecuteScalar();

    //returning a boolean comparator works like this :
    //will return true if the result is greater than zero, but false if it is not.
    con.Close();
    return result > 0;
}

任何關於此的幫助/指導將非常感激。

如果您的配置中有連接字符串,請執行此操作

<connectionStrings>
    <add name="ConnectionString" connectionString="data source=.;Initial Catalog=MyDatabase;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
</connectionStrings>

然后,您將需要使用此方法來訪問它System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString

您還應該在using語句中包裝數據訪問,這樣就不會泄漏連接並使池泛濫。 這是使用語句的更新示例。

public static bool HasDeposit(int userId)
{
    //since executeScalar is intended to retreive only a single value
    //from a query, we select the number of results instead of the email address
    //of each matching result.
    const string queryTransaction = "SELECT COUNT(UserID) FROM Transaction WHERE TransactionTypeID = 6 AND UserID = @UserID";

    var constr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

    using (var con = new SqlConnection(constr))
    {
        using (var cmd = new SqlCommand(queryTransaction, con))
        {
            cmd.Parameters.AddWithValue("@UserID", userId);
            con.Open();

            var result = (int)cmd.ExecuteScalar();

            //returning a boolean comparator works like this :
            //will return true if the result is greater than zero, but false if it is not.
            return result > 0;
        }
    }
}

在web.config中:

<appSettings>
    <add key="ConnectionString" value="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"/>
</appSettings>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM