为什么带文本框的SqlConnection不起作用?

时间:2016-09-30 13:48:41

标签: c#

我将此代码用于连接字符串:

namespace TransInsert
{
  public partial class Form1: Form
  {
    public Form1()
    {
        InitializeComponent();
    }

    SqlConnection con = new SqlConnection(@"Data Source=" + textBox1.Text + ";Initial Catalog=database;user ID=sa;Password=xxxx");

    private void TextBox1.Text_SelectedIndexChanged(object sender, EventArgs e)
    {
    }
  }
}

我将它放在IntializeCompoment下,我收到错误:

  

字段初始值设定项不能引用非静态字段,方法或属性' TransInsert.Form1.textBox1'

2 个答案:

答案 0 :(得分:5)

您无法使用其他实例变量(con)初始化实例变量(textBox1)。

在许多情况下,将数据库连接的引用保存为实例变量甚至没有意义。由于连接池的原因,打开连接很便宜,您可以随时打开它,并在完成后关闭它,并且您将成为黄金。

当您需要从数据库中提取数据时,请执行以下操作:

void Foo()
{
    using (var conn = new SqlConnection("..."))
    {
        conn.Open();

        // then read about how to use ADO.NET
    }
}

此外,请阅读using块以及为什么这是一个好主意。

Bonus chatter:注入连接字符串,请务必检查用户输入,而不是盲目地将其合并到连接字符串中。

答案 1 :(得分:1)

你不能在事件外使用文本框设置连接字符串。你可以在form_load事件或button_click事件中使用连接字符串,如下所示

using System.Data.SqlClient;
    private void Form1_Load(object sender, EventArgs e)
    {

        SqlConnection con;
        con = new SqlConnection(@"Data Source=" + textBox1.Text + ";Initial Catalog=DBName;user ID=sa;Password=yourpassword");
        con.Open();
    }