C# 运行应用程序时,当我运行存储过程时,SqlAdapter不返回任何数据

C# 运行应用程序时,当我运行存储过程时,SqlAdapter不返回任何数据,c#,sql,sql-server,windows,datagridview,C#,Sql,Sql Server,Windows,Datagridview,它看起来连接良好,除了返回数据或在datagridview上显示数据外,它什么都做。我不确定这到底是怎么回事。如果我在SQLServerManagementStudio中运行它,它在本地计算机上运行良好 不过,它在这里似乎运行不正常,它只是我单击的一个按钮,但什么也没有返回到我的脑海中 SqlConnection conn = new SqlConnection(connectionstring); SqlCommand StoredProcedureCommand = new SqlComm

它看起来连接良好,除了返回数据或在datagridview上显示数据外,它什么都做。我不确定这到底是怎么回事。如果我在SQLServerManagementStudio中运行它,它在本地计算机上运行良好

不过,它在这里似乎运行不正常,它只是我单击的一个按钮,但什么也没有返回到我的脑海中

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");
}

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


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

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


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

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


谢谢大家的帮助

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


谢谢大家的帮助

来自StoredProcedureCommand.ExecuteOnQuery;推断它用于执行目录操作,这意味着此方法将用于执行DML,稍后,您将尝试使用相同的存储过程返回数据并填充数据网格,该网格不会返回任何内容,因为只执行DML操作而不是select操作。可能您想调用Different过程。嗯,好的,我看您是对的,我没有插入或更新任何内容。这几乎只是一个select语句DDL查询。我还尝试了StoredProcedureCommand.ExecuteReader;若通过select语句DDL查询,您的意思是使用select语句创建表,那个么它也不会返回任何内容。存储过程中的Select语句应该返回行,然后只有它才能填充到网格中。您可以尝试直接在DB中执行存储过程,并查看它是否返回任何行。如果您可以提供存储过程的select语句和问题,这将更有帮助。这是服务器上已经存在的存储过程,它在本地运行良好,但由于某些原因,它不会将任何数据返回给我。如果我在本地服务器上运行这个过程和那些参数,它将返回18行。这是一个windows窗体,它不返回数据,而是通过internet运行该过程。我可以在几分钟内完成这个过程。顺便谢谢你的帮助!感谢您尝试取出StoredProcedureCommand.ExecuteOnQuery;线可能填充操作不会再次执行该命令,因为您事先已经执行了该命令;推断它用于执行目录操作,这意味着此方法将用于执行DML,稍后,您将尝试使用相同的存储过程返回数据并填充数据网格,该网格不会返回任何内容,因为只执行DML操作而不是select操作。可能您想调用Different过程。嗯,好的,我看您是对的,我没有插入或更新任何内容。这几乎只是一个select语句DDL查询。我还尝试了StoredProcedureCommand.ExecuteReader;若通过select语句DDL查询,您的意思是使用select语句创建表,那个么它也不会返回任何内容。存储过程中的Select语句应该返回行,然后只有它才能填充到网格中。您可以尝试直接在DB中执行存储过程,并查看它是否返回任何行。如果您可以提供存储过程的select语句和问题,这将更有帮助。这是服务器上已经存在的存储过程,它在本地运行良好,但由于某些原因,它不会将任何数据返回给我。如果我在本地服务器上运行这个过程和那些参数,它将返回18行。这是一个windows窗体,它不返回数据,而是通过internet运行该过程。我可以在几分钟内完成这个过程。顺便谢谢你的帮助!感谢您尝试取出StoredProcedureCommand.ExecuteOnQuery;线可能Fill操作不会再次执行该命令,因为您之前已经执行了该操作。好的,但这是否也解释了没有填充datagridview1的原因?谢谢你可以试试这个。我可以在测试代码中看到正在填充的数据源。在存储过程执行后填充数据表是很重要的。好的,但这能解释为什么datagridview1没有被填充吗?谢谢你可以试试这个。我看得出来 正在我的测试代码中填充的数据源。执行存储过程后填充数据表是很重要的。