【问题标题】:Error - A field initializer cannot reference the non-static field, method, or property错误 - 字段初始值设定项无法引用非静态字段、方法或属性
【发布时间】:2012-12-07 20:11:03
【问题描述】:

我今天开始学习 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 中)创建了数据库...我还添加了数据源。我做了我以前做过的事情....但它不起作用:(

【问题讨论】:

    标签: c# sql sql-server-2008


    【解决方案1】:

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

    但是,您可能不应该在实践中这样做,因为您只是要求某人打开 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

    【讨论】:

      【解决方案2】:

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

      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】:

        你必须把你的初始化代码放在构造函数中:

        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); 中访问 c​​on,因为它不是静态的。该错误是不言自明的。这个问题与 SQL 无关,它与 C# 相关,我建议重新访问 C#。

        【讨论】:

          【解决方案4】:
          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();
          }
          

          【讨论】:

            【解决方案5】:

            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);
                 }  
            }
            

            }

            【讨论】:

            • 这里是连接类里面的con方法,所以这个错误解决了
            猜你喜欢
            • 1970-01-01
            • 2019-04-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-16
            • 2013-01-04
            • 2022-01-23
            相关资源
            最近更新 更多