SqlDataAdapter 不使用填充方法将数据传递到数据表

SqlDataAdapter not passing data to datatable using fill method

我今天来找你时遇到了一个让我完全难过的错误,因为这段代码实际上是我应用程序中其他地方的重用代码,并且在使用它的其他地方也能正常工作。唯一真正的区别是,这是第一次有人尝试以这种方式连接到这个特定的 SQL 服务器。

值得注意的是,这个确切的代码工作了几次,然后就决定死了。

代码生成器: Visual Studio 2012,C#

要求: 连接到 SQL 服务器数据库的表单,从 table 中提取数据,将其保存到 DB2 数据库以备后用。

问题:当通过SqlDataAdapter.Fill方法填充数据table时,没有数据传递给数据table ,从而触发捕获部分。

尝试的解决方案:

更改了 x86 和 x64 之间的平台目标;都失败了(应用程序是 x86 原生的)。

重新启动visual studio,失败。

在 SqlDataAdapter 之前关闭 sql 连接,以防它打开自己的连接,失败。

异常消息:

System.ArgumentNullException:El valor no puede ser nulo。 //值不能为空

Nombre del parámetro: dataTable //参数名称

en System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand 命令, CommandBehavior 行为) zh System.Data.Common.DbDataAdapter.Fill(DataTable 数据表) en PROJECT.FORM.loadSQLData() en c:\FORM.cs:línea 101

代码片段:

string connectionString = @"Data Source=SQLSERVER;Initial Catalog=DATABASE;user id=USER;password=PASSWORD;";
string querySelect = @"SELECT TOP 100 COLUMN1 FROM dbo.TABLE";
SqlConnection cnn;

//Datatable definition
public Datatable table = new Datatable();

public form_Load(object sender, EventArgs e)
{
    loadSQLData();
}

private void loadSQLData()
{
    try
    {
        cnn = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand(querySelect, cnn);
        if (cnn.State == ConnectionState.Open) cnn.Close(); //Just in case there was an open zombie connection to the server
        cnn.Open();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(table); //Dies right here
    }
    catch
    {
        //Catch stuff
    }
    finally
    {
        cnn.Close();
    }
}```




如果想通过fill方式向datatable传递数据,可以参考以下代码:

public partial class Form3 : Form
{
    public Form3()
    {
        InitializeComponent();
    }
    private void Form3_Load(object sender, EventArgs e)
    {
        loadSQLData();
    }
    string connectionString = @"Enter your own connect string";
    string querySelect = " Enter your own sql statement";
    SqlConnection cnn;
    private void loadSQLData()
    {
        using (cnn = new SqlConnection(connectionString))
        {
            SqlCommand cmd = new SqlCommand(querySelect, cnn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable table = new DataTable();        
            da.Fill(table);
            //dataGridView1.DataSource = table; I pass data into datagridview to check if it can pass data to datatable with fill method.
        }
    }
}

非常感谢您的所有回答和建议。我已经设法解决了这个问题,但事实证明它比我预期的要直观一些。

事实证明,我错误地实例化了我的数据表,如下所示:

public DataTable table1, table2 = new DataTable();

Visual studio 没有将此视为错误并允许正常编译。该错误在运行时弹出,因为 table1 未正确实例化。通过单独实例化每个数据表来解决,如下所示:

public Datatable table1 = new Datatable();

public DataTable table2 = new DataTable();

我记得这样做是为了节省线路 space,但可惜它真的让我大吃一惊。

干杯!