【问题标题】:When running my application, SqlAdapter returns no data, when I'm running a stored procedure运行我的应用程序时,当我运行存储过程时,SqlAdapter 不返回任何数据
【发布时间】:2015-11-30 02:31:04
【问题描述】:

看起来它连接良好,除了返回数据或在 datagridview 上显示它之外,它什么都做。我不确定这到底有什么问题。如果我在 SQL Server Management Studio 中运行它,它在本地计算机上运行良好。

它似乎在这里运行不正确,它只是一个我正在单击的按钮,但没有任何返回给我。

SqlConnection conn = new SqlConnection(connectionstring);

SqlCommand StoredProcedureCommand = new SqlCommand("storedprocedure", conn);
StoredProcedureCommand.CommandType = CommandType.StoredProcedure;

SqlParameter myParam1 = StoredProcedureCommand.Parameters.Add("@p1", SqlDbType.VarChar, 20);
myParam1.Value = "Arg";

SqlParameter myParam2 = StoredProcedureCommand.Parameters.Add("@p2", SqlDbType.VarChar, 300);
myParam2.Value = "Gra";

try
{
    conn.Open();
    MessageBox.Show("Database Connection Success");
}
catch (Exception conerr)
{
    MessageBox.Show("Database Connection Failed");
}

try
{
    StoredProcedureCommand.ExecuteNonQuery();
    MessageBox.Show("Running stored procedure succeeded");
}
catch (Exception proerr)
{
    MessageBox.Show("Running stored procedure failed");
}

try
{
    using (SqlDataAdapter adap = new SqlDataAdapter(StoredProcedureCommand))
    {
        DataTable dt = new DataTable();
        int rowCount = dt.Rows.Count;
        adap.Fill(dt);
        dataGridView1.DataSource = dt;

        MessageBox.Show("Data returned fine" + " This many rows were returned" + rowCount.ToString());
    }
}
catch (Exception erradapt)
{
    MessageBox.Show("Error retrieving data to grid" +  erradapt.ToString());
}

try
{  
    conn.Close();
    MessageBox.Show("Closing database connection");
}
catch (Exception errclose)
{
    MessageBox.Show("Error closing database connection");
}

【问题讨论】:

  • 来自 StoredProcedureCommand.ExecuteNonQuery();推断它是用来执行目录操作的,也就是说这个方法是用来执行DML的,稍后你尝试使用相同的存储过程来返回数据并填充数据网格,它不会返回任何东西,因为只有DML执行操作而不是选择操作。可能是您想调用不同的过程。
  • 嗯好吧,我看你是对的,我没有插入或更新任何东西,它几乎只是一个选择语句 DDL 查询。我也试过 StoredProcedureCommand.ExecuteReader();但也没有成功。
  • 如果通过 select 语句 DDL 查询您的意思是使用 select 语句创建表,那么它也不会返回任何内容。存储过程中的 Select 语句应该返回行,然后才可以将其填充到网格中。您可以尝试直接在DB中执行存储过程,看看它是否返回任何行。如果您可以在问题中提供存储过程的选择语句会更有帮助。
  • 这是一个已经在服务器上的存储过程,它在本地运行良好,但由于某种原因它只是没有将任何数据返回给我。如果我在本地服务器上运行此过程和这些参数,它将返回 18 行。这是一个不给我返回数据的 Windows 窗体,它通过 Internet 运行该过程。我可以在几个过程中抓住程序。感谢您的帮助!我很感激
  • 你试过取出StoredProcedureCommand.ExecuteNonQuery();线?也许 Fill 操作不会再次执行该命令,因为您之前已经这样做了。

标签: c# sql sql-server windows datagridview


【解决方案1】:

感谢大家的帮助,问题是返回存储过程后的连接字符串,我注意到了

感谢大家的帮助!!

【讨论】:

    【解决方案2】:

    我刚刚注意到您的 rowCount 变量将始终为 0,因为它是在 dt 填充之前分配的。如果您将 rowCount 用于任何类型的循环,则循环将立即退出。而且您的消息将始终显示“返回 0 的这么多行”。

    顺便说一句,我在我的应用程序中使用了一段类似的代码,它确实有效。

    【讨论】:

    • 好的,但这能解释 datagridview1 也没有被填充吗?谢谢
    • 也许你可以试试这个。 stackoverflow.com/questions/19114635/… 我可以看到在我的测试代码中填充了数据源。执行存储过程后填充数据表很重要。
    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2015-07-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多