簡體   English   中英

SqlDataAdapter 不使用填充方法將數據傳遞到數據表

[英]SqlDataAdapter not passing data to datatable using fill method

我今天帶着一個讓我完全難過的錯誤來找你,因為這段代碼實際上是我應用程序中其他地方的重用代碼,並且在使用它的其他地方也能正常工作。 唯一真正的區別是,這是第一次有人嘗試以這種方式連接到這個特定的 SQL 服務器。

值得注意的是,這個確切的代碼工作了幾次,然后就決定死了。

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

要求:連接到SQL服務器數據庫的表格,從表中提取數據,將其保存到DB2數據庫以備后用。

ISSUE:當通過SqlDataAdapter.Fill方法填充data.table時,沒有數據傳遞給data.table,從而觸發了catch部分。

嘗試的解決方案:

在 x86 和 x64 之間更改了平台目標; 都失敗了(應用程序是 x86 本機)。

重啟visual studio,失敗。

在 SqlDataAdapter 之前關閉 sql 連接,以防它打開自己的連接,失敗。

異常信息:

System.ArgumentNullException: El valor no puede ser nulo。 //值不能是null

Nombre del parámetro: dataTable //參數名稱

zh System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) zh System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) zh PROJECT.FORM.loadSQLData() zh 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();

我記得這樣做是為了節省行空間,但可惜它真的讓我大吃一驚。

干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM