从方法动态获取 asp:SqlDataSource 连接字符串(无 Webconfig)

Getting asp:SqlDataSource Connection String dynamically from a method (Without Webconfig)

正在尝试从 asp:sqldatasource 标签中的 class 设置 sql 服务器:

Public static SqlConnection getConnection()
{
      SqlConnection conn = new SqlConnection();
      //rest of the code that 100% works
      return conn;
}

此函数已在 C# 代码中测试,100% 有效。 现在我想在 asp:SqlDataSource:

中使用它
<asp:SqlDataSource runat="server" ID="sqlDBConnection"
ConnectionString="<%# inProcessInventory.DataTools.getConnection().ConnectionString %>"

我收到:

The ConnectionString property has not been initialized

有什么建议吗?

ConnectionString,顾名思义,就是一个字符串。您正在返回一个 SqlConnection,其中需要一个字符串。

public static string getConnection()
{
    return "Data Source=localhost;Initial Catalog=yourDB;User ID=yourUser;Password=pa$$w0rd";
}

或者

public static SqlConnection getConnection()
{
    SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=yourDB;User ID=yourUser;Password=pa$$w0rd");
    return conn;
}

更新

如果您在后面的代码中设置连接字符串,它确实可以正常工作:

protected void Page_Load(object sender, EventArgs e)
{
    sqlDBConnection.ConnectionString = inProcessInventory.DataTools.getConnection().ConnectionString;
}

来源:https://forums.asp.net/t/1072016.aspx?Dynamic+connection+strings

If your connection string is created dynamically at run time. We cannot set the connection string at design time.

绑定到 属性 可能不起作用,因为这取决于您何时在控件上调用 DataBind。

在这种情况下,最好在 Page_Load 的事件处理程序后面的代码中设置它,例如

Me.dsTest.ConnectionString = objClientConnection.ConnectionString

然后您可以手动调用 DataBind()。

我们经常使用 SqlConnection 并直接设置 Connectionstring 或从 configurationManager 中调用(in Asp.net)。您了解 SqlConnectionStringBuilder Class。它在命名空间 System.Data.SqlClient .

您可以使用此 class 在 SqlConnection Class 中设置连接字符串值。这是代码:

SqlConnection myConnection = new  SqlConnection();

SqlConnectionStringBuilder myBuilder = new  SqlConnectionStringBuilder();

myBuilder.UserID = "sa";

myBuilder.Password = "sa123";

myBuilder.InitialCatalog = "DbName";

myBuilder.DataSource = "ServerName";

myBuilder.ConnectTimeout = 30;

myConnection.ConnectionString = myBuilder.ConnectionString;