【问题标题】:Public SQL Connection String using Field Initializer使用字段初始化器的公共 SQL 连接字符串
【发布时间】:2016-04-11 23:05:19
【问题描述】:

我想要一个从文本框文本填充的公共连接字符串。

public static string conString ="server=" + tb_serverinfo.Text + "; database=master;user=" + tb_user.Text + ";pwd=" + tb_password.Text + ";Connection Timeout=5";

由于

,这将不起作用

严重性代码描述项目文件行抑制状态 错误 CS0236 字段初始化程序无法引用非静态字段、方法或属性 'Database_Tool.tb_serverinfo' 数据库工具 C:\Users... 120 活动

我是 C# 新手,所以我不能总是弄清楚我需要做什么来解决我的问题。

最终我想要一个公共 SQL 连接,这样我就可以在任何地方执行 try 语句和 conn.open,但我稍后会尝试解决。

谢谢!

【问题讨论】:

  • 我建议您基本上阅读一下静态字段和实例字段之间的区别。我还建议不要使用公共 SqlConnection 变量 - 相反,您可以使用一种方法来按需打开 SqlConnection,然后从您需要的任何地方调用它,但在完成该操作后关闭连接。跨度>
  • @JonSkeet 我会仔细阅读,谢谢。这正是我想做的,在尝试中打开和关闭。

标签: c#


【解决方案1】:

错误似乎很明显。您正在尝试从非静态(不同实例不同)数据初始化静态(所有实例相同)变量。听起来您需要一个非静态函数或属性来构建您的连接字符串:

public string conString 
{
    get{
        return "server=" 
             + tb_serverinfo.Text 
             + "; database=master;user=" 
             + tb_user.Text 
             + ";pwd=" 
             + tb_password.Text 
             + ";Connection Timeout=5";
    }  
} 

最终我想要一个公共 SQL 连接 ...

坏主意。连接由 .NET 汇集,因此创建连接通常不是一个昂贵的过程。与其浪费精力试图确定您的“共享”连接是否打开,设置连接字符串等。最好在需要时创建一个,打开它,做你的东西,然后处理它(这也会关闭它)当你完成时。

一个有效的方法是使用using 块:

using(var conn = new SqlConnection(conString))
{
    using(var cmd = new SqlCommand(sql, conn))
    {
        conn.Open();
        ... use the command
    }  // cmd is disposed
}  // conn is disposed

这样就可以很好地清理所有内容,即使出现异常也是如此。

【讨论】:

  • 非常感谢!是否有可能有一个 if 语句来确定它是否使用连接的这些参数?我希望用户能够拥有 SQL 身份验证/Windows 的复选框,即 IF checkbox.ticked = true 然后使用这个字符串,否则使用另一个?
  • 当然——你可以有两个不同的属性,或者一个接受所有可能参数并返回适当字符串的函数,或者其他东西。尝试一些东西,然后回来解决具体问题。
猜你喜欢
  • 2013-10-04
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2013-09-06
  • 1970-01-01
  • 2021-05-10
相关资源
最近更新 更多