C# 来自C和SSMS的连接错误

C# 来自C和SSMS的连接错误,c#,sql,sql-server,database-connection,C#,Sql,Sql Server,Database Connection,当尝试从C连接到SQLServer时,报告的错误是4060,我得到 System.Data.SqlClient.SqlException HResult=0x80131904 Message=无法打开登录请求的数据库MyDatabase。 登录失败。用户“DBClient”登录失败。 Source=.Net SqlClient数据提供程序堆栈跟踪: 使用来自SSMS的凭据时,一切正常 使用SQL身份验证。 MSSQL数据库服务器是本地网络上的另一台计算机。 C代码位于开发人员计算机上,单击IIS

当尝试从C连接到SQLServer时,报告的错误是4060,我得到

System.Data.SqlClient.SqlException HResult=0x80131904 Message=无法打开登录请求的数据库MyDatabase。 登录失败。用户“DBClient”登录失败。 Source=.Net SqlClient数据提供程序堆栈跟踪:

使用来自SSMS的凭据时,一切正常

使用SQL身份验证。 MSSQL数据库服务器是本地网络上的另一台计算机。 C代码位于开发人员计算机上,单击IIS Express Google Chrome按钮在浏览器中查看时出错。这是C代码。。。 sqlConnect=新的SqlConnection

sqlConnect.ConnectionString=数据源=SlaDAS;初始目录= 我的数据库;Uid=DBClient;Pwd=123456PW;连接超时=30; 最大池大小=500

sqlConnect.Open

我也尝试了很多不同版本的字符串,所有的东西都返回这个错误


感谢您的帮助,Stanley

我们可以让Visual Studio帮助您生成工作连接字符串:

向项目中添加新的数据集类型对象 打开它,右键单击任意位置并选择AddTableAdapter 通过向导,在某个时候您必须创建一个连接字符串。单击添加连接: 如果数据库类型错误,请单击“更改”: 将其更改为SQL Server,并检查它是否使用SQLS驱动程序,而不是OLE驱动程序: 您可能会看到,如果您执行以下操作,请单击“确定”: 然后填写剩下的细节,对话框应该看起来更像SSM;填写相同的详细信息,单击测试连接或调整某些内容等,直到您获得成功。。 在向导的下一页上,选择检索行的SQL,填写一些查询,选择*FROM Person WHERE id=@id-不管是哪个表,尤其是如果您不打算将此强类型数据集用作数据访问层。。只需将任何有效的查询作为测试 把它命名为FillById 完成向导 现在,应用程序的设置文件包含一个工作连接字符串

如果您正在使用EF、dapper或其他ORM,您可以从那里使用数据集、复制数据集等,然后扔掉数据集,但如果您计划使用如下数据适配器和数据表:

using(var da as new DataAdapter("SELECT * FROM Person WHERE ID = @x", "Data Source=...."){
  da.SelectCommand.Parameters.AddWithValue("@x", 1234);
  var dt = new DataTable();
  da.Fill(dt);
  
  int age = Convert.ToInt32(dt.Rows[0]["Age"]);
  ...

}
老实说,只做一个tableadapter更容易、更好,如:

var ta = new PersonTableAdapter(); //it's like a data adapter
var dt = new PersonDataTable();    //it's a datatable with extra properties so no casting

ta.FillById(dt, 1234);             //load record with id 1234

int age = dt[0].Age;               //it's an int already, no convert etc like above
通过右键单击tableadapter并选择add Query,您可以向tableadapter添加更多查询,例如,您可以添加SELECT*FROM Person WHERE FirstName,如@FirstName,并将其称为FillbyfirstName,如:

ta.FillByFirstNameLike(dt, "Jo%"); //find all person names starting with Jo
或返回数据表:

var dt = ta.GetDataByFirstNameLike("Jo%"); //get a new PersonDataTable 
太长,读不下去了
使用Visual Studio帮助您使用数据集中的向导创建工作连接字符串。作为过程的一部分,您必须获得一个工作连接,您将能够轻松地证明它工作,并测试下载数据/连接等,而无需在代码中进行繁琐的尝试和错误。完成后,正确的连接字符串出现在设置/配置中,可以直接从那里使用。您可以放弃数据集,但如果您计划使用DataAdapter和datatables检索数据,使用数据集中的tableadapters和强类型数据表将使您的生活更加轻松,而不是使用连接字符串中的数据源。将Data Source=SlaDAS更改为Server=SlaDAS将返回相同的错误。我相信您的SSM也安装在与SQL Server相同的服务器上。如果在客户机上安装SSM并尝试访问sql server实例,会怎么样?您显然有凭证问题。在您的情况下,当您尝试从另一个服务器客户端访问sql server实例时,还需要打开防火墙等。您可以尝试在连接字符串中添加端口号。或者尝试使用计算机的IP地址。MyDatabase是您数据库的正确名称吗?该错误表示您的应用程序可以连接到sql,但无法从数据库读取数据。可能给定的数据库名称不正确,或者用户无法访问数据库它与问题无关。@SaeedEsmaeelinejad是的,它是。。看到我大胆回答的部分了吗。这是一种使用用户熟悉的图形界面将工作连接字符串导入C应用程序的方法,因为它与SSMS中的图形界面类似