0

私のサイトでは、リスト ビューをループしてデータベースに情報を挿入しようとしています。ただし、サイトを実行すると、

ユーザーの既定のデータベースを開けません。ログインに失敗しました。ユーザーのログインに失敗しました.... (私のユーザー名)

唯一のことは、挿入コマンドがある別のページで、それが正常に機能し、問題なくデータベースからデータにアクセスできることです。

私が使用しようとしているコードは次のとおりです。

Guid InsertID = System.Guid.NewGuid();
        String connectionString = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
        var myConnection = new SqlConnection(connectionString);

        SqlCommand insertCMD = new SqlCommand("INSERT INTO Orders (Order_ID, Item_ID, QTY, Price_Per_Unit, Total_Price) VALUES (@Order_ID, @Item_ID, @QTY, @Price_Per_Unit, @Total_Price)", myConnection);
        insertCMD.Connection.Open();

        foreach (ListViewItem item in ItemLV.Items)
        {
            TextBox QTY = (TextBox)item.FindControl("QTYTB");
            int InsertQTY = int.Parse(QTY.Text);

            if (InsertQTY > 0)
            {
                Label Price = (Label)item.FindControl("PriceLabel");
                HiddenField ItemID = (HiddenField)item.FindControl("IDHF");

                Decimal InsertPrice = Decimal.Parse(Price.Text.Substring(1));
                Guid InsertItemID = Guid.Parse(ItemID.Value);
                Decimal InsertTotalPrice = InsertPrice * InsertQTY;

                insertCMD.Parameters.Clear();
                insertCMD.Parameters.AddWithValue("@Order_ID", InsertID);
                insertCMD.Parameters.AddWithValue("@Item_ID", InsertItemID);
                insertCMD.Parameters.AddWithValue("@QTY", InsertQTY);
                insertCMD.Parameters.AddWithValue("@Price_Per_Unit", InsertPrice);
                insertCMD.Parameters.AddWithValue("@Total_Price", InsertTotalPrice);

                try
                {
                    insertCMD.ExecuteNonQuery();
                }
                catch
                {
                    Response.Redirect("~/Order/Error.aspx");
                }
                finally
                {

                }
            }
        }

        insertCMD.Connection.Close();

このコードは上記のエラーをスローしますが、私の登録ページ (「foreach」ループを除いた同じコードを使用し、異なるコマンドとパラメーターを使用) では、問題なく動作します。したがって、ユーザーがデータベースにアクセスできないこととは実際には関係がないと思いますが、おそらく私のコードに問題があります。

スタック トレースは次のとおりです。

[SqlException (0x80131904): ユーザーの既定のデータベースを開けません。ログインに失敗しました。 ユーザー(私のユーザー アカウント) のログインに失敗しました
。owningConnection, TaskCompletionSource 1 回の再試行, DbConnectionOptions userOptions) +143 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 回の再試行) +83 System.Data.SqlClient.SqlConnection.Open() +96 Order_Order.ContinueBTN_Click(オブジェクト送信者, EventArgs e ) m:\OrderingSystem\Order\Order.aspx.cs:36 で1 wrapCloseInAction) +5295167 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1682
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +69
System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +30
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +317
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +889
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +307
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) +434
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +225
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +37
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnectionOptions userOptions) +558
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnectionOptions userOptions) +67
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +1052
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource

1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +167
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource



System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9553594
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
System.Web.UI.WebControls.Button.System.Web.UI. IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page. ProcessRequestMain (ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +1724

編集:

私の web.config ファイルの接続文字列は次のとおりです。

<connectionStrings>
    <clear />
    <add name="LocalSqlServer" connectionString="Data Source=.\WebSite2013;AttachDbFilename=|DataDirectory|\Ordering_System_Database.mdf;Integrated Security=True;User Instance=True"
      providerName="System.Data.SqlClient" />
    </connectionStrings>

私の登録ページからの作業コードは次のとおりです。

    String connectionString = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
                        var myConnection = new SqlConnection(connectionString);

SqlCommand insertUser = new SqlCommand("INSERT INTO Customer_Profiles(UID, First_Name, Last_Name, State_ID, Country_ID, Phone_Number, Mobile_Number, Date_of_Birth) VALUES(@UID, @First_Name, @Last_Name, @State_ID, @Country_ID, @Phone_Number, @Mobile_Number, @Date_of_Birth)", myConnection);
                                insertUser.Parameters.AddWithValue("@UID", newUserGuid);
                                insertUser.Parameters.AddWithValue("@First_Name", FirstNameTB.Text);
                                insertUser.Parameters.AddWithValue("@Last_Name", LastNameTB.Text);
                                insertUser.Parameters.AddWithValue("@State_ID", StateDDL.SelectedValue);
                                insertUser.Parameters.AddWithValue("@Country_ID", CountryDDL.SelectedValue);
                                if (PhoneTB.Text.Length > 0)
                                {
                                    insertUser.Parameters.AddWithValue("@Phone_Number", PhoneTB.Text);
                                }
                                else
                                {
                                    insertUser.Parameters.AddWithValue("@Phone_Number", DBNull.Value);
                                }
                                if (MobileTB.Text.Length > 0)
                                {
                                    insertUser.Parameters.AddWithValue("@Mobile_Number", MobileTB.Text);
                                }
                                else
                                {
                                    insertUser.Parameters.AddWithValue("@Mobile_Number", DBNull.Value);
                                }
                                insertUser.Parameters.AddWithValue("@Date_of_Birth", BirthDay);
                                try
                                {
                                    insertUser.Connection.Open();
                                    insertUser.ExecuteNonQuery();
                                    insertUser.Connection.Close();

                                }
                                catch
                                {
                                    Response.Redirect("~/Error.aspx");
                                }
                            }

それ以来、少し実験し、テスト選択と挿入クエリを追加したところ、使用するクエリに関係なく、このページでのみエラーが発生しているように見えることがわかりましたが、Web サイトの他のすべてのページでは正常に動作します。 .

4

1 に答える 1

1

助けてくれた人たちのおかげで、問題は実際には ListViews で使用されている接続文字列にあると判断できました。web.config ファイルのようにサーバー インスタンスを使用するのではなく、データベースをローカル データベースとしてアタッチしていたのです。

今後この問題が発生する場合は、ページに実装されている SqlDataSources が web.config ファイルと同じ接続文字列を使用していることを確認してください。

ConnectionString="<%$ ConnectionStrings:LocalSqlServer %>"

そして、それがデータベースではなくページに関係があるかどうかを判断できる方法は、それが1つのページまたは特定のページでのみ発生するためです(私の場合のように)。

于 2013-06-23T02:31:04.673 に答える