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进行开发。
答案 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
语句中放置一个断点,看看是否有任何回报。