错误 - 字段初始值设定项无法引用非静态字段,方法或属性

时间:2012-12-07 20:11:04

标签: c# sql sql-server-2008

我今天开始学习C#编程中的SQL连接。我尝试了一些基本的东西,如插入,删除等。

我想在另一个项目中尝试同样的事情,但我遇到了问题。因为它向我显示了一个我无法解决的错误:(

错误:

  

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

这是我的代码(我刚刚开始将它与SQL中的数据库连接)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Artikujt
{
    public partial class Form1 : Form
    {
        SqlConnection con = new SqlConnection(@"Data Source=TALY-PC;Initial Catalog=Katalogi;Integrated Security=True;Pooling=False");
        SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tblArtikujt", con);
        DataSet dsl = new DataSet();    

        public Form1()
        {
            InitializeComponent();
        }    
    }
}

错误在此代码中的变量con

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tblArtikujt", con);

我在SQL中创建了数据库(在Visual Studio中)...我还添加了数据源。我做了我以前做过的确切事情......但它不起作用:(

5 个答案:

答案 0 :(得分:5)

错误正是它所说的。您不能在con的初始化中使用da,因为它只会在实例创建期间创建。您需要将con创建为static或将初始化行放在构造函数中。

HOWEVER ,你可能不应该在实践中这样做,因为你只是要求有人打开SqlConnection并让它保持打开状态。您应该更多地考虑使用using块创建连接以利用处置模式

静态:

public partial class Form1 : Form
{
    static SqlConnection con = new SqlConnection(@"Data Source=TALY-PC;Initial Catalog=Katalogi;Integrated Security=True;Pooling=False");
    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tblArtikujt", con);
    DataSet dsl = new DataSet();    


    public Form1()
    {
        InitializeComponent();
    }

或构造函数中的实例化:

public partial class Form1 : Form
{
    SqlConnection con;
    SqlDataAdapter da;
    DataSet dsl;  

    public Form1()
    {
        InitializeComponent();
        con = new SqlConnection(@"Data Source=TALY-PC;Initial Catalog=Katalogi;Integrated Security=True;Pooling=False");
        da = new SqlDataAdapter("SELECT * FROM tblArtikujt", con);
        dsl = new DataSet();  
    }
}

我会告诉你research the using block yourself

答案 1 :(得分:0)

您必须将初始化代码放在构造函数中:

public partial class Form1 : Form
{
            SqlConnection con = null; 
            SqlDataAdapter da = null; 
            DataSet dsl =  null;     


            public Form1()
            {
                InitializeComponent();
                con = new SqlConnection(@"Data Source=TALY-PC;Initial Catalog=Katalogi;Integrated Security=True;Pooling=False");
                 da = new SqlDataAdapter("SELECT * FROM tblArtikujt", con);
                dsl = new DataSet();    
            }
}

您无法在字段初始值设定项SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tblArtikujt", con);中访问con,因为它不是静态的。错误是自我解释的。问题不是SQL相关的,它与c#相关,我建议重新访问C#。

答案 2 :(得分:0)

您需要将此初始化移动到构造函数中。

SqlConnection con;
SqlDataAdapter da;
DataSet dsl;

public Form1()
{
    InitializeComponent();

    con = new SqlConnection(@"Data Source=TALY-PC;Initial Catalog=Katalogi;Integrated Security=True;Pooling=False");
    da = new SqlDataAdapter("SELECT * FROM tblArtikujt", con)
    dsl = new DataSet();
}

答案 3 :(得分:0)

SqlDataAdapter da = new SqlDataAdapter(" SELECT * FROM tblArtikujt",con); 在任何方法或事件中使用 如下面的示例按钮事件

       using System;
       using System.Collections.Generic;
       using System.ComponentModel;
       using System.Data;
       using System.Drawing;
       using System.Linq;
       using System.Text;
       using System.Windows.Forms;
       using System.Data.SqlClient;

    namespace Artikujt
    {
 public partial class Form1 : Form
  {
     SqlConnection con = new SqlConnection(@"Data Source=TALY-PC;Initial              Catalog=Katalogi;Integrated Security=True;Pooling=False");

    DataSet dsl = new DataSet();    

    public Form1()
    {
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tblArtikujt", con);
        InitializeComponent();
    }  

   private void button1_Click(object sender, EventArgs e)
     { SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM    tblArtikujt",           con);
     }  
}

}

答案 4 :(得分:0)

static SqlConnection con = new SqlConnection(@"Data Source=TALY-PC;Initial Catalog=Katalogi;Integrated Security=True;Pooling=False");
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tblArtikujt", con);
DataSet dsl = new DataSet();

public Form1()
{
    InitializeComponent();
}