![](/img/trans.png)
[英]CommandTimeout not working when using SqlDataAdapter to fill a DataTable
[英]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.