0

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 进行开发。

4

3 回答 3

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 查询,但是它返回了一个有效的 sql 查询值string,还是您的自定义命令对象解析到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更加灵活和多才多艺。

于 2013-02-10T03:28:51.923 回答
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;
    }
于 2013-02-10T03:29:47.723 回答
0

在你之前return dt;,尝试添加这个:

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

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

于 2013-02-10T04:36:46.043 回答