Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 进程sqlservr.exe在C中的Connection.Close()之后继续运行#_C#_Sql - Fatal编程技术网

C# 进程sqlservr.exe在C中的Connection.Close()之后继续运行#

C# 进程sqlservr.exe在C中的Connection.Close()之后继续运行#,c#,sql,C#,Sql,我创建了一个到SQL数据库的连接,但是当我关闭它时,即使在关闭应用程序之后,进程sqlservr.exe也会继续运行。我也尝试过使用Dispose,但遇到了同样的问题。sqlservr.exe是为了保持运行(不是在启动应用程序之前)?有没有办法杀死它 namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponen

我创建了一个到SQL数据库的连接,但是当我关闭它时,即使在关闭应用程序之后,进程sqlservr.exe也会继续运行。我也尝试过使用Dispose,但遇到了同样的问题。sqlservr.exe是为了保持运行(不是在启动应用程序之前)?有没有办法杀死它

namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string conexao = "Data Source=(LocalDB)\\v11.0;AttachDbFilename=C:\\Users\\SMITH\\Documents\\C#\\WindowsFormsApplication3\\WindowsFormsApplication3\\Database1.mdf;Integrated Security=True";
        SqlConnection conn = new SqlConnection(conexao);
        SqlCommand comando = new SqlCommand("SELECT COUNT(*) FROM Usuarios WHERE NomeUser = @user and SenhaUser = @senha", conn);

        comando.Parameters.Add("@user", SqlDbType.VarChar).Value = textBox1.Text;
        comando.Parameters.Add("@senha", SqlDbType.VarChar).Value = textBox2.Text;


        conn.Open();
        int i = (int)comando.ExecuteScalar();

        string a = i.ToString();

        textBox3.Text = a;

        if(i>0){
            MessageBox.Show("Existe");
        }else{
            MessageBox.Show("Nem existe");

            conn.Dispose();

        }
    }
}   

}

你可能认为你在做的不是你真正在做的事情

您希望通过嵌入式SQL server在本地访问本地数据库。事实并非如此。实际上,您只是在启动完全成熟的MS SQL Server服务(sqlservr.exe),它与您的应用程序没有任何关联-除了由您的进程启动外,它与您将其配置为在Windows等启动时运行的情况相同

这并不一定是坏事,但如果您希望应用程序与嵌入式服务器一起工作,则可能会遇到问题。也就是说,SQL server是在计算机上配置的,而不是通过您的应用程序配置的,它必须(单独)安装,如果有另一台服务器在运行,您将连接到该服务器,而您不一定拥有该服务器的权限等


如果您仅将其用于内部工具,则无需更改任何内容,运行sql server进程也可以,您可以通过服务将其关闭。如果这是分布式应用程序的一部分,请考虑使用不同的SQL Server,例如SQLServer随处(SQL Server CE),或者甚至是一些完全不同的东西,如MS Access(在每个Windows PC上都可以免费使用,而不只是Office)或FieldBy. 你可能在想你在做的不是你真正在做的事情

您希望通过嵌入式SQL server在本地访问本地数据库。事实并非如此。实际上,您只是在启动完全成熟的MS SQL Server服务(sqlservr.exe),它与您的应用程序没有任何关联-除了由您的进程启动外,它与您将其配置为在Windows等启动时运行的情况相同

这并不一定是坏事,但如果您希望应用程序与嵌入式服务器一起工作,则可能会遇到问题。也就是说,SQL server是在计算机上配置的,而不是通过您的应用程序配置的,它必须(单独)安装,如果有另一台服务器在运行,您将连接到该服务器,而您不一定拥有该服务器的权限等


如果您仅将其用于内部工具,则无需更改任何内容,运行sql server进程也可以,您可以通过服务将其关闭。如果这是分布式应用程序的一部分,请考虑使用不同的SQL Server,例如SQLServer随处(SQL Server CE),或者甚至是一些完全不同的东西,如MS Access(在每个Windows PC上都可以免费使用,而不只是Office)或FieldBy. 由于您的连接字符串表明您正在使用LocalDB,请从

LocalDB不创建任何数据库服务;LocalDB进程会在需要时自动启动和停止。应用程序刚刚连接到“数据源=(localdb)\v11.0”,localdb进程作为应用程序的子进程启动最后一次与此进程的连接关闭几分钟后,进程将关闭。(重点已添加)


我已经在自己的环境中确认了“几分钟后”的行为。但请确保没有任何进程在任何地方保留连接。

因为您的连接字符串指示您正在使用LocalDB,请从

LocalDB不创建任何数据库服务;LocalDB进程会在需要时自动启动和停止。应用程序刚刚连接到“数据源=(localdb)\v11.0”,localdb进程作为应用程序的子进程启动最后一次与此进程的连接关闭几分钟后,进程将关闭。(重点已添加)


我已经在自己的环境中确认了“几分钟后”的行为。但要确保没有任何进程在任何地方保留连接。

是吗?一个是连接,一个是进程。进程必须保持运行,这是“服务器”别忘了,我认为你不应该担心它。这是预期的行为;sqlservr.exe是Microsoft SQL Server的实际exe-它正在运行的事实是正确的,因为您的进程需要连接到它。也许您正在考虑连接池?通常,与服务器的连接是最有价值的资源。Dispose方法将关闭连接并将其返回给sql server(sqlserver.exe)。那么?一个是连接,一个是进程。进程必须保持运行,这是“服务器”别忘了,我认为你不应该担心它。这是预期的行为;sqlservr.exe是Microsoft SQL Server的实际exe-它正在运行的事实是正确的,因为您的进程需要连接到它。也许您正在考虑连接池?通常,与服务器的连接是最有价值的资源。Dispose方法将关闭连接并将其返回给sql server(sqlserver.exe)。我想我只是从internet的某个地方读到了一些错误的说明。谢谢你的解释。我想我只是从网上的某个地方读到了一些错误的说明。谢谢你的解释。