首页 > 解决方案 > 来自 C# 的连接错误和来自 SSMS 的工作

问题描述

尝试从 C# 连接到 SQLServer 时,报告的错误 # 为 4060,我得到...

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

使用 SSMS 的凭据时,一切都很好。

  1. 使用 SQL 身份验证。
  2. MSSQL 数据库服务器是本地网络上的另一台机器。
  3. C# 代码位于开发机器上,单击“IIS Express Google Chrome”按钮在浏览器中查看时出现错误。这是C#代码...

sqlConnect = 新的 SqlConnection();

sqlConnect.ConnectionString = "数据源 = SlaDAS;初始目录 = MyDatabase;Uid = DBClient;密码 = 123456PW;连接超时 = 30;最大池大小 = 500";

sqlConnect.Open();

我也尝试了很多不同版本的字符串,一切都返回这个错误。

感谢所有帮助,斯坦利

标签: c#sqlsql-serverdatabase-connection

解决方案


我们可以让 Visual Studio 帮助您生成有效的连接字符串:

  • 将新的 DataSet 类型对象添加到您的项目中
  • 打开它,右键单击任意位置并选择 Add TableAdapter
  • 通过向导,在某些时候您必须创建一个连接字符串。单击添加连接

在此处输入图像描述

  • 如果数据库类型错误(我的已经打开提示访问),点击更改:

在此处输入图像描述

  • 将其更改为 SQL Server,并检查它使用的是 SQLS 驱动程序,而不是 OLE 驱动程序:

在此处输入图像描述

  • 您可能会看到这一点,如果您这样做,请单击“确定”:

在此处输入图像描述

  • 然后填写其余的详细信息,对话框应该看起来像 SSMS;填写相同的详细信息,单击测试连接或调整一些东西等,直到你成功..

在此处输入图像描述

  • 在向导的下一页上,选择“检索行的 SQL”,填写一些查询SELECT * FROM Person WHERE id = @id- 什么表都没有关系,特别是如果您不打算使用这个强类型数据集作为数据访问层..只需将其作为任何有效查询作为测试
  • 将其命名为FillById
  • 完成向导

现在您的应用程序的设置文件包含一个工作连接字符串

如果您使用的是 EF、dapper 或其他 ORM,则可以从那里使用它、复制它等,然后将 DataSet 扔掉,但如果您打算使用这样的数据适配器和数据表:

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"]);
  ...

}

老实说,做一个像这样的表格适配器更容易更好:

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

您可以通过右键单击它并选择 Add Query 来向 tableadapter 添加更多查询,例如,您可以添加SELECT * FROM Person WHERE FirstName LIKE @firstname并调用它 FillByFirstNameLike 然后:

ta.FillByFirstNameLike(dt, "Jo%"); //find all person names starting with Jo

或者返回一个数据表:

var dt = ta.GetDataByFirstNameLike("Jo%"); //get a new PersonDataTable 

TLDR

使用 Visual Studio 帮助您使用 DataSet 中的向导创建工作连接字符串。作为该过程的一部分,您必须获得一个有效的连接,您将能够轻松地证明它工作并测试下载数据/连接等,而无需在代码中进行繁琐的试验和错误。完成后,正确的连接字符串在您的设置/配置中,可以直接从那里使用。您可以丢弃数据集,但如果您打算使用数据适配器和数据表来检索数据,那么在数据集中使用表适配器和强类型数据表会更容易


推荐阅读