我能';t使用C#代码连接到SQL Server数据库

我能';t使用C#代码连接到SQL Server数据库,c#,sql-server,sqlclient,C#,Sql Server,Sqlclient,我试图创建注册表,但当我运行我的项目时,收到此错误消息 引发异常:System.Data.dll中的“System.Data.SqlClient.SqlException” 我的代码: using System; using System.Data; using System.Data.SqlClient; namespace Registration{ private void Register_Click(object sender, EventArgs e) { SqlCon

我试图创建注册表,但当我运行我的项目时,收到此错误消息

引发异常:System.Data.dll中的“System.Data.SqlClient.SqlException”

我的代码:

using System;
using System.Data;
using System.Data.SqlClient;

namespace Registration{
private void Register_Click(object sender, EventArgs e)
{

     SqlConnection con = new SqlConnection("Data Source=SHAB 
     SQLEXPRESS;InitialCatalog=Phonebook;Integrated Security=True"); 

     SqlCommand cmd = new SqlCommand(@"INSERT INTO [dbo].[registration]([username[fullname],[Password]) VALUES('" + username.Text+"', '"+fullname.Text+"', '"+password.Text+"')");

     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
     MessageBox.Show("Congradulation You have been Registered");
}
错误出现在
con.open()行上

引发异常:System.Data.dll中的“System.Data.SqlClient.SqlException”

其他信息:

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:命名管道)


您在
[username]
[fullname]
之间缺少一个逗号。请尝试以下操作:

INSERT INTO ... ([username], [fullname], ...

另外,使用sql参数也非常重要,我认为您只是在连接字符串中省略了用户名和密码。 请尝试以下代码

Data Source=YourServer;Initial Catalog=YourDatabaseName;User ID=YourUsername;Password=YourPassword

首先检查SQL Server服务是否正在运行。 然后检查连接字符串中的数据源值,如果您使用的是SQLExpress,则可能是
SqlConnection con=new-SqlConnection(“数据源=SHAB\SQLEXPRESS;InitialCatalog=Phonebook;集成安全性=True”);

您的连接字符串必须位于app.config文件中

<connectionStrings>
    <add name="DbConnection" connectionString="Data Source=.\SQLEXPRESS;Initial 
    Catalog=dbname;Integrated Security=True" 
    providerName="System.Data.EntityClient"
<connectionStrings>
添加数据库连接

public string DbCon = 
 ConfigurationManager.ConnectionStrings["DbConnection"].ToString();

var Query=@"INSERT INTO [dbo].[registration]([username[fullname],[Password]) VALUES('" + username.Text+"', '"+fullname.Text+"', '"+password.Text+"')"
using (con = new SqlConnection(DbCon))
        {
            con.Open();
            SqlCommand com = new SqlCommand(Query, con);
            com.ExecuteNonQuery();
            con.Close();
        }
建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到或无法访问该服务器

如错误所示,您的连接无法连接到SQL Server,请确保您能够执行
telnet SHAB 1433

如果
Telnet
失败:

  • 确保启用了TCP/IP协议,您可以通过SQL Server Configuration manager进行验证(以下屏幕截图供参考)
  • 验证未为SQL Express服务配置自定义端口(通过SQL Server配置管理器)
如果未配置自定义端口

  • 确保SQL浏览器服务正在运行
  • 在Windows防火墙中创建规则以接受TCP端口上的传入连接
    1433
    1434(TCP和UDP)
    -这必须在运行SQL服务的服务器上完成
  • 重新启动SQL浏览器服务
  • 您的连接应该在这里使用
    DataSource=SHAB\\SQLEXPRESS
    。您可以使用
    telnet SHAB 1433
    进行验证
  • 如果配置了自定义端口

  • 在Windows防火墙中创建规则以接受自定义TCP端口上的传入连接-这必须在运行SQL服务的服务器上完成
  • 重新启动SQL服务
  • 当您使用
    DataSource=SHAB,
    时,您的连接应该在这里工作。但是,您可以执行
    telnet SHAB
    来验证

  • SQL Server配置管理器:

    用户名和全名部分之间有问题“插入[dbo]。[registration]([username[fullname],[Password])是您的名为“Shab sqlexpress”的计算机“?我怀疑它,不能有带空格的机器名..Shab是机器名吗?在这种情况下,Shab/sqlexpress,或者如果不是,可能是./sqlexpress..无论哪种方式,它都会告诉你它无法通过名为pipesHello的方式找到它,我的机器名是Shab,数据库服务器名是Shab\sqlexpress,但是当我写Shab\sqlexpress时,我在”\”上得到了一个错误”反斜杠sign@ProfessorShab:您需要使用
    SHAB\\SQLEXPRESS
    (两个反斜杠)-您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入-检查OP发布的连接字符串使用集成安全性。这可能应该是一条注释!谢谢,我是堆栈溢出新手谢谢您的帮助,private void这是我编写的versas resultpriva代码te void Register_Click(object sender,EventArgs e){SqlConnection con=new SqlConnection(“数据源=SHAB\\SQLEXPRESS;初始目录=Phonebook;用户ID=SHAB\\Professor SHAB;”);SqlCommand cmd=new SqlCommand(@“插入[dbo].[registation]([username],[fullname],[Password])//值(''“+username.Text+”、“+fullname.Text+”、“+password.Text+”))”;con.Open();cmd.ExecuteNonQuery();con.Close();MessageBox.Show(“您已注册的祝贺”);}这是我引发异常时出现的错误:System.Data.dll中的“System.Data.SqlClient.SqlException”其他信息:用户“SHAB\Professor SHAB”登录失败。我已添加了斜杠,正如您所说,我收到此消息时引发异常:System.Data.SqlClient.SqlException中的“System.Data.SqlException”其他信息:登录失败d表示用户“SHAB\Professor SHAB”。代码SqlConnection con=new SqlConnection(“数据源=SHAB\\SQLEXPRESS;初始目录=Phonebook;用户ID=SHAB\\Professor SHAB;”);SqlCommand cmd=new SqlCommand(@“插入[dbo].[注册]([username],[fullname],[Password])//值(“+username.Text+”,”+fullname.Text+“,“+password.Text+”)”;con.Open();如果你输入用户id,那么你也必须输入密码。为什么连接字符串需要在app.config中?只需要为连接字符串设置一个字符串参数。为了更好地解决这个问题,它应该在app.config中,否则你可以在项目的任何地方添加连接字符串。这完全取决于你,与问题p没有任何关系尽管如此,这只是连接字符串存储位置的语义——将连接字符串移动到app.config并不能解决问题。
    public string DbCon = 
     ConfigurationManager.ConnectionStrings["DbConnection"].ToString();
    
    var Query=@"INSERT INTO [dbo].[registration]([username[fullname],[Password]) VALUES('" + username.Text+"', '"+fullname.Text+"', '"+password.Text+"')"
    using (con = new SqlConnection(DbCon))
            {
                con.Open();
                SqlCommand com = new SqlCommand(Query, con);
                com.ExecuteNonQuery();
                con.Close();
            }