“重置连接”是什么意思? System.Data.SqlClient.SqlException0x80131904

问题描述

我知道这有点含糊,但是我无法查明问题所在。

当我对本地数据库运行一些代码时,它运行良好。当我使用远程数据库时,出现错误。 它发生在程序执行的中间。运行dbup升级,然后手动查询失败,但出现以下异常:

System.Data.sqlClient.sqlException(0x80131904):重置连接将导致与初始登录不同的状态。登录失败。 用户'sa'登录失败。

我正在使用sqlConnection手动创建new sqlConnection(),也正在使用DbUp

我不确定我会做错什么。也没有从哪里开始调试它。 ConnectionString不变,我一直使用sa连接到数据库

首先要问的一个好问题是“重置连接”是什么意思?我怎么做?

解决方法

经过几个小时的反复试验,我得到了一段再现错误的最小代码

function ajax_login_init(){

    wp_register_script('ajax-login-script',get_template_directory_uri() . '/ajax-login-script.js',array('jquery'),time() ); 
    wp_enqueue_script('ajax-login-script');

    wp_localize_script( 'ajax-login-script','ajax_login_object',array( 
        'ajaxurl' => admin_url( 'admin-ajax.php' ),'redirecturl' => home_url(),'loadingmessage' => __('Sending user info,please wait...!')
    ));

    add_action( 'wp_ajax_nopriv_ajaxlogin','ajax_login' );
}

if (!is_user_logged_in()) {
    add_action('init','ajax_login_init');
}

function ajax_login(){

    check_ajax_referer( 'ajax-login-nonce','security' );
    $info = array();
    $info['user_login'] = $_POST['username'];
    $info['user_password'] = $_POST['password'];
    $info['remember'] = true;

    $user_signon = wp_signon( $info,false );
    if ( !is_wp_error($user_signon) ){
        wp_set_current_user($user_signon->ID);
        wp_set_auth_cookie($user_signon->ID);
        echo json_encode(array('loggedin'=>true,'message'=>__('Login successful,redirecting...')));
    }
    
    die();
}

完整的堆栈跟踪为

string dbName = "TESTDB";
Run("master",$"CREATE DATABASE [{dbName}]");
Run(dbName,$"ALTER DATABASE [{dbName}] COLLATE Latin1_General_100_CI_AS");
Run(dbName,"PRINT 'HELLO'");

void Run(string catalog,string script)
{
    var cnxStr = new SqlConnectionStringBuilder
    {
        DataSource = serverAndInstance,UserID = user,Password = password,InitialCatalog = catalog
    };

    using var cn = new SqlConnection(cnxStr.ToString());
    using var cm = cn.CreateCommand();
    cn.Open();
    cm.CommandText = script;
    cm.ExecuteNonQuery();
}

如果我将第一个Unhandled Exception: System.Data.SqlClient.SqlException: Resetting the connection results in a different state than the initial login. The login fails. Login failed for user 'user'. Cannot continue the execution because the session is in the kill state. A severe error occurred on the current command. The results,if any,should be discarded. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception,Boolean breakConnection,Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean& dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName,Boolean async,Int32 timeout,Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion,String methodName,Boolean sendToPipe,Boolean& usedCache,Boolean asyncWrite,Boolean inRetry) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() ... 更改为Run(dbName...,它将运行正常。 因此,这与在同一数据库的上下文中运行Run("master"...有关

,

这不是我的问题的答案,但是我通过不处理SqlConnection而是重新使用来解决此问题。

我还是不明白问题所在

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...