仅在一个页面上登录失败,导致用户错误

时间:2013-06-22 10:55:41

标签: asp.net sql-server

在我的网站中,我试图遍历列表视图并将信息插入到我的数据库中。但是,当我运行该网站时,我得到了

  

无法打开用户默认数据库。登录失败。登录失败了   user ....(我的用户名)

唯一的一点是,在另一个页面上我有一个insert命令,它工作正常,我能够从数据库访问数据而没有任何问题。

我尝试使用的代码是:

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):无法打开用户默认数据库。登录   失败。用户登录失败(我的用户帐户)。]   System.Data.SqlClient.SqlInternalConnection.OnError(SQLEXCEPTION   exception,Boolean breakConnection,Action 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&连接)+78
  System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(的DbConnection   owningConnection,TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +167
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource
1次重试,DbConnectionOptions userOptions)+143
  System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1   重试)+83 System.Data.SqlClient.SqlConnection.Open()+96
  Order_Order.ContinueBTN_Click(Object sender,EventArgs e)in   米:\ OrderingSystem \订单\ Order.aspx.cs:36
  System.Web.UI.WebControls.Button.OnClick(EventArgs e)+9553594
  System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串   eventArgument)+103
  System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串   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(Boolean includeStagesBeforeAsyncPoint,Boolean 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");
                                }
                            }

我已经尝试了一点并添加了测试选择和插入查询,并发现它似乎只是针对此页面发生错误,无论我使用什么查询,但在我的网站中的所有其他页面上会很好。

1 个答案:

答案 0 :(得分:1)

感谢那些帮助过的人,我设法确定问题实际上是我的ListViews使用的连接字符串 - 它将我的数据库作为本地数据库附加,而不是像在web.config中那样使用我的服务器实例。文件。

对于将来遇到此问题的任何人,请检查您网页上实现的任何SqlDataSources是否使用与web.config文件中相同的连接字符串 - 我现在已经这样做了:

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

你能够判断它是否与页面有关而不是数据库的方式是因为它只会发生在一个页面或某些页面上(就像它对我而言)。