为什么我的datagridView得到0结果?

时间:2013-02-10 02:44:21

标签: c# sql-server winforms datatable

C#代码:

command = new SqlCommand(null, connection);
command = createSQLQuery(command); // returns a valid SQL Query that returns results in SQL Management Studio 2012
//dataGridView1.DataSource = GetData(command);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
connection.Close();
dataGridView1.DataSource = GetData(command);
debugMySQL();

public DataTable GetData(SqlCommand cmd) {
    //SqlConnection con = new SqlConnection(connString);
    //SqlCommand cmd = new SqlCommand(sqlcmdString, cn);

    SqlDataAdapter da = new SqlDataAdapter(cmd);
    connection.Open();
    DataTable dt = new DataTable();
    da.Fill(dt);
    connection.Close();
    return dt;
}

我正在使用C#和WinForm并使用Visual Studio 2012进行开发。

3 个答案:

答案 0 :(得分:2)

你的问题很模糊,但我会尽力回答。

我认为,通常,在执行该命令之前,您需要定义要传递到SqlCommand的命令类型。

command.Commandtype = CommandType.StoredProcedure;
(要么)
command.CommandText = CommandType.Text;

之后可以在字符串值中设置SQL查询 command.CommandText = ""; // your SQL query, or the name of the stored procedure

此外,您不需要两次设置网格的DataSource。只有在得到结果后才需要设置它。返回SQL查询执行 但是你得到的结果是你的选择。但是,您似乎使用GetData()方法和command.ExecuteReader()方法执行了两次命令。此外,您还要两次设置网格的DataSource

我想即使你设法正确设置命令对象,由于你的双重执行,数据可能会在它们之间以某种方式丢失。

顺便说一句,从createSQLQuery()方法返回什么数据类型。你说它返回了一个有效的SQL查询,但是它在string中返回了一个有效的sql查询值,还是在你的自定义命令对象中解析为SqlCommand

我将包含我所知道的最佳可操作程序,用于从SQL数据库中读取并将该数据绑定到网格控件中。

// I suppose you get the connection object as 'con'
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "...";   // You desired SQL query goes here, or if you want to execute a stored procedure, set the command type as 'StoredProcedure' and text as sp name.

SqlDataAdapter dap = new SqlDataAdapter();
dap.SelectCommand = cmd;
DataTable tbl = new DataTable();
dap.Fill(tbl);
<br>
if (tbl.Rows.Count > 0)
{
    grid.DataSource = tbl;
    grid.DataBind();
}

我建议您收到DataTable而不是SqlDataReader的结果。原因DataTable更灵活,更灵活。

答案 1 :(得分:0)

        var command = new SqlCommand();
        command.CommandText = createSQLQuery(command);
        command.Connection = connection;
        dataGridView1.DataSource = GetData(command);

        debugMySQL();

    }

    public DataTable GetData(SqlCommand cmd)
    {
        //SqlConnection con = new SqlConnection(connString);
        //SqlCommand cmd = new SqlCommand(sqlcmdString, cn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        return dt;
    }

答案 2 :(得分:0)

return dt;之前,请尝试添加此内容:

if(dt.row.count > 0)
{
    var something =dt[0][0];
}

然后,在if语句中放置一个断点,看看是否有任何回报。