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,但可惜它真的让我大吃一惊。
干杯!
我今天来找你时遇到了一个让我完全难过的错误,因为这段代码实际上是我应用程序中其他地方的重用代码,并且在使用它的其他地方也能正常工作。唯一真正的区别是,这是第一次有人尝试以这种方式连接到这个特定的 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,但可惜它真的让我大吃一惊。
干杯!